Dust.js输出JSON密钥

时间:2012-05-12 15:25:07

标签: javascript json dust.js

使用dust.js,是否可以输出JSON密钥?

即。如何输出密钥“name”和“profile”而不在我的模板中对其进行硬编码?

{
name: "Foo",
profile: {
           name: "Bar"
         }
}

最终文本,JSON密钥名称和配置文件没有条形码。

name Foo
profile - name - Bar

3 个答案:

答案 0 :(得分:3)

确定你可以。定义一个这样的部分:

{@keyvalue:cont}
  {key} - {value}
{/keyvalue}

然后重新定义JSON上下文,如下所示:

cont:{
    name: "Foo",
    profile: "Bar" //I'm simplifying this a bit for the sake of this example
}

这使得上面的keyvalue部分的上下文仅限于'cont'。然后你可以像这样定义keyvalue帮助器:

"keyvalue": function(chunk, context, bodies){
  var items = context.current(), //this gets the current context hash from the Context object (which has a bunch of other attributes defined in it)
      ctx;

  for (key in items) {
    ctx = {"key" : key, "value" : items[key]};
    chunk = chunk.render(bodies.block, context.push(ctx));
  }

  return chunk
}

应该做的伎俩。在dustjs网站上测试了这个。希望你可以添加到这个以进入嵌套哈希。

如果您需要在上下文中定义HTML标记属性,这将非常有用 - 我不希望必须在单独的键中定义一组属性,然后定义其对应的值集。我喜欢他们在一起。更易于阅读,更易于管理。

答案 1 :(得分:2)

以下方法与@ asyraf9的答案几乎相同,但没有重新定义JSON和使用示例。

dust.helpers.iterate = function(chunk, context, bodies, params) {
    params = params || {};
    var obj = params['on'] || context.current();
    for (var k in obj) {
        chunk = chunk.render(bodies.block, context.push({key: k, value: obj[k]}));
    }
    return chunk;
}

来源:https://github.com/rashad612/dustjs-helpers/commit/9039130dc060a4bf3e93856601891a7da9047bac

在模板中使用它,如:

{#myobject.myarray}
    {@iterate on=.}
        {key} - {value}
    {/iterate}
{/myobject.myarray}

它显示数组内对象的所有键和值。

答案 2 :(得分:-1)

Dust没有内置此功能,因为从哲学角度讲,JSON永远不会有密钥中的数据。考虑将您的数据模型更改为:

{
  name: "Foo",
  profile: {
    fields: [
      {
        title: "name",
        value: "Bar"
      }
    ]
  }
}