如何正确使用dustjs&在sailsjs中创建助手?

时间:2014-07-30 11:32:19

标签: node.js internationalization sails.js dust.js

我使用sailsjs构建我的网站,但决定不使用其默认的EJS进行模板化。

在./config/views.js中,我设置了以下内容(在npm install dustjs-linkedin& dustjs-helpers之后):

engine: 'dust',

在我的HomeController ./api/controllers/HomeController.js中,我需要执行以下操作来从./config/locales/en.json获取语言文本:

title: res.i18n('title'),
//or
siteName: res.__('siteName')

在我的主页模板./views/home/index.dust中,我可以通过以下方式访问这些字符串:

<h1>{title}</h1>
<p>{siteName}</p>

但是,随着字符串数量的增加,它将是多余的,因为我必须在控制器中设置每个变量才能在模板中使用它。

所以我的问题是:

  1. 有没有更好或更正的方法在我的模板中使用./config/locales/en.json中的文本变量而不必在我的控制器文件中定义它们?

  2. 如何访问&amp;使用我的控制器中的dustjs模块,以便..

  3. 我可以创建自定义dustjs助手吗? (如何创建dustjs助手?)

  4. 此外,似乎我无法在./config/i18n.js中配置i18n的设置(objectNotation:true not working)这是配置i18n的正确位置吗?

2 个答案:

答案 0 :(得分:0)

这是一个很长的问题。我会回答这个部分:我可以创建自定义dustjs助手吗? (如何创建dustjs助手?)

答。是的你可以。这是(在sailsjs中): 我们可以在api / services / MultiplyBy2.js

中创建一个全局可访问的服务

<强> MultiplyBy2.js

module.exports = {

  myFunc: function (chunk, context, bodies, params) {
    var number = params.num;
    number = number*2;    
    return chunk.write(number);
  }

};

然后你可以在如下的dustjs模板中使用它:

<p>10 * 2 = {#sails.services.multiplyby2.myFunc num=10/}</p>

注意:文件名(MultiplyBy2)将为小写。但函数名称将与定义的(myFunc);

相同

希望这有帮助。

答案 1 :(得分:0)

我也有这个问题。我进一步深入研究了这一点,并认为解决这个问题太麻烦了,就在我切换到Sails.js上的Handlebars时。

Sails.js中Handlebars的i18n语法为{{__'Welcome'}}。