Ember.js中的可枚举对象(键值映射)

时间:2012-12-24 21:09:10

标签: ember.js ember-data

Ember中是否有一个支持Ember.Array / Ember.Enumerable的键值对象?

我想在我的Handlebars模板中使用{{#each}}迭代它们。

我的用例是从服务器显示任意JSON(用户定义字段)(下面给出的示例)。我可以从嵌套数组递归创建视图(使用each帮助器),但我无法迭代对象。我的计划是找到(或写入)一个对象,它将包装JSON对象并允许它们是可枚举的。这样做最好的方法是什么?

到目前为止,我的想法是扩展/混合Enumerable/Array/ArrayProxy/ObjectProxy,将基础键值存储存储为Ember.Array,并添加keys字段来存储密钥的组合。宾语。然后,我可以使用setUnknownPropertyunknownProperty来设置/获取基础值,并使keys保持同步。这种方法听起来不错吗?

来自服务器的JSON格式

这是一个例子(用户记录他们自己的锻炼数据)。 请注意,这只是一个例子;格式完全灵活,因此我无法创建Ember数据模型来为这些用户定义的字段建模。总的来说,数据可以是任意复杂的JSON(任何嵌套的散列,数组,基元)

{
   "bench_press":[
      {
         "weight":95,
         "repetitions":5,
         "tags":[
            "warmup"
         ]
      },
      {
         "weight":135,
         "repetitions":3,
         "tags":[
            "warmup"
         ]
      },
      {
         "weight":155,
         "repetitions":3,
         "tags":[
            "warmup"
         ]
      },
      {
         "weight":165,
         "repetitions":2,
         "tags":[
            "warmup"
         ]
      },
      {
         "weight":185,
         "repetitions":1,
         "tags":[
            "warmup"
         ]
      },
      {
         "weight":195,
         "repetitions":1,
         "tags":[
            "warmup",
            "overshoot"
         ]
      },
      {
         "weight":190,
         "repetitions":5,
         "tags":[

         ]
      },
      {
         "weight":190,
         "repetitions":5,
         "tags":[

         ]
      },
      {
         "weight":190,
         "repetitions":5,
         "tags":[

         ]
      },
      {
         "weight":190,
         "repetitions":3,
         "tags":[

         ]
      },
      {
         "weight":190,
         "repetitions":2,
         "tags":[
            "negatives"
         ]
      }
   ]
}

1 个答案:

答案 0 :(得分:0)

就我的Ember.js哲学而言,声明性Handlebars模板足够保守,可以强调在模板中使用 less 逻辑。

在上述情况下,我建议您使用ContainerView提供JSON作为其上下文。