【问题标题】:Sails: locals from jade template帆:来自玉模板的当地人
【发布时间】:2016-03-01 10:07:54
【问题描述】:

我正在尝试利用moment.js 的优势来解析sails 应用程序下玉模板中的日期。 我读过,为了在视图服务器端使用moment.js,我必须利用locals的概念。

因此根据documentation我正在修改我的路线:

var moment = require("moment");
...
'get /post/:post_id': {
    controller: 'PostController',
    action: 'readPostById',
    locals: { moment: moment } // adding moment.js
},

但是当我尝试从玉中使用时

...
- var date = moment().format('YYYY'); 
span= date
...

..我得到并错误地说 moment 不是函数

我做错了什么?

【问题讨论】:

  • span= moment().format('YYYY'); 工作吗?

标签: javascript node.js sails.js momentjs


【解决方案1】:

我自己想通了。背后的原因是在路由中定义locals 与在res.render() 上传递模板参数相同。在我的情况下,我使用模板传递参数/数据,这似乎会覆盖 locals 传递的内容。

因此,如果您想在模板中使用moment,则在渲染时将其传递,而不是locals,如下所示:

var moment = require("moment");
...
showPage: function(req, res) {
    res.render('page.jade', {moment: moment, other_data: "just to test"});
};

【讨论】:

    【解决方案2】:

    你不能给本地人分配班级

    在您的代码中

    locals: { moment: moment }locals: { moment: moment.toString() }一模一样

    所以moment的值是

    moment = "function utils_hooks__hooks() {
            return hookCallback.apply(null, arguments);
        }"
    

    解决方案,您需要在视图之外计算变量

    locals: { currentYear: moment().format('YYYY') } 
    

    【讨论】:

    • 根据documentation 我可以,因为sails 会自动将lodash 传递给所有视图。
    • 我认为这是因为 lodash 定义为全局变量,也许您也可以将时刻导出为全局变量
    • 因此,如果您在 src/services 中使用时刻名称创建服务并返回时刻实例,您可以在视图中获取它!
    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2011-12-11
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多