【问题标题】:jsViews / jsRender vs rich expressions inside templatejsViews / jsRender 与模板内的丰富表达式
【发布时间】:2015-09-06 15:34:23
【问题描述】:

快速提问:我正在使用 jsViews 来呈现 HTML 模板。我想要某种翻译。现在我的应用程序返回全局变量 "language" ,其值等于:pl || zh || 德。

如何使用全局变量“语言”来减少 JSON 中负责翻译的数据?

1)。 JSON数据

    var language = [
  {
    "pl": {
            "prop": "value",
            "prop": "value"
    },
    "en": {
            "prop": "value",
            "prop": "value"
    },
    "de": {
            "prop": "value",
            "prop": "value"
    }
  }
];

2)。工作 HTML 模板,但语言值是静态写入的

<script type="text/x-jsrender" id="test">
    <div>
        {{props pl}}
        <span>
            {{>prop}}
        </span>
        {{/props}}
    </div>
</script> 

3)。我想将 {{props pl}} 更改为 {{props *language}} 以在模板中动态获取语言,但如何正确编写?

我知道:

  a). $.views.settings.allowCode= true;        
  b). {{*:language}} will return language shortcode

那么如何在 {{if}} 或 {{props}} 或 {{for}} 中使用这个表达式??

提前谢谢你!!

【问题讨论】:

    标签: javascript json template-engine jsrender jsviews


    【解决方案1】:

    使用allowCode = true 最适合您希望包含无法以声明方式实现的操作的代码的情况。

    您可以混合使用代码和常规标签,如下面的示例所示:http://www.jsviews.com/#allowcodetag;

    但避免 allowCode 将提供更好的可维护性和代码分离。

    如果在这种情况下,如果您只想访问全局变量,您可以简单地将它们传入或声明为助手:http://www.jsviews.com/#helpers。

    例如你可以这样做:

    <input data-link="~options.language" />
    
    <div>
        {^{props words[~options.language]}}
        <span>
            {{>prop}}
        </span>
        {{/props}}
    </div>
    

    和

    var data = {
      words: {
        en: {
          prop: "value",
          prop: "value"
        },
        de: {
          ...
      }};
    
    $.templates("#test").link('#container', data, {options: {language: "en"}});
    

    现在,如果您更改输入中的语言,道具显示将切换到新语言。

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多