尘埃js循环通过json中的对象

时间:2014-01-10 16:24:57

标签: javascript json dust.js

我在使用dust.js循环浏览json时遇到了麻烦,这是我的json

{
   "Undergraduate":{
      "metaid":"0770",
      "Offcampus":{
         "FeesItems":{
            "tuition":{
               "label":"Tuition Fees",
               "value":"5,870"
            },
            "comprehensive":{
               "label":"Comprehensive Fees",
               "value":"2,141"
            },
            "studentActivity":{
               "label":"Student Activity Fees",
               "value":"190"
            },
            "academicExcellence":{
               "label":"Academic Excellence Fee",
               "value":"225"
            },
            "room":{
               "label":"Room",
               "value":"0"
            },
            "board":{
               "label":"Board",
               "value":"0"
            },
            "livingAllowance":{
               "label":"Living Allowance",
               "value":"9,738"
            }
         }
      } 
   }
}

我想循环遍历FeesItems对象中的项目。

{#Undergradaute.Offcampus.FeesItems}
  {label}, {value}{~n}   <!-- What should be given in this line? -->
{/Undergradaute.Offcampus.FeesItems}

2 个答案:

答案 0 :(得分:3)

只要FeesItems是一个数组FeesItems

,这将循环遍历label呈现valueFeesItems= []的项目。

http://akdubya.github.io/dustjs/#guide

{
   "Undergraduate":{
      "metaid":"0770",
      "Offcampus":{
         "FeesItems":[{
               "label":"Tuition Fees",
               "value":"5,870"
            },
            {
               "label":"Comprehensive Fees",
               "value":"2,141"
            },
            ...
]
         }
      } 
   }
}

以下是“尘埃指南”的示例:

{#friends}
  {name}, {age}{~n}
{/friends}

{
  friends: [
    { name: "Moe", age: 37 },
    { name: "Larry", age: 39 },
    { name: "Curly", age: 35 }
  ]
}

更新1:

由于您不希望更改原始JSON,因此需要从原始JSON生成一个新对象

var newModel =  Object.keys(obj.Undergraduate.Offcampus.FeesItems).map(function(prop){ return obj.Undergraduate.Offcampus.FeesItems[prop] });

请注意,javascript将保留对象的引用,如果尝试类似的东西:

originalObj.Undergraduate.Offcampus.FeesItems.board.label = "Costa Rica"
console.log(newModel[5].label);

答案 1 :(得分:0)

您可以使用帮助程序迭代对象。

例如,你可以像这样定义一个帮助器:

dust.helpers.iter = function(chunk, context, bodies, params) {
  var obj = dust.helpers.tap(params.obj, chunk, context);

  var iterable = [];

  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      var value = obj[key];

      iterable.push({
        '$key': key,
        '$value': value,
        '$type': typeof value
      });
    }
  }

  return chunk.section(iterable, context, bodies);
};

然后,在你的模板中,你会像这样循环:

{@iter obj=Undergradaute.Offcampus.FeesItems}
  {$value.label}, {$value.value}{~n}
{/iter}