在ember模型中,如何引用动态对象键?

时间:2015-04-23 04:25:18

标签: javascript ember.js

在我们的应用程序中,当前我们将一组对象从服务器端传递到模型中,并且数组中的每个元素都有一个键。例如......

[
  {name: "dog", sound: "bark", food: "cats"}, 
  {name: "cat", sound: "meow", food: "mouse"}
]

在模型中,这被定义为......

animals: hasMany(Animal, {key: 'name', embedded: true })

然后,如果我们想要cat的数据,我们使用findBy功能找到名称=“cat”的那个,就像这样......

var animalName = "cat";
model.get('animals').findBy('name', animalName);

这很有效,有许多潜在类型的“动物”物品,我们已经知道我们在寻找什么。

但是我很好奇其他原因,如果我们可以从服务器传递这个作为Map,这将成为客户端上看起来像这样的JSON对象......

animals : { "dog" : {sound: "bark", food: "cat"},
            "cat" : {sound: "meow", food: "mouse"}
          }

为了做到这一点,似乎在模型代码中我们需要为每个潜在的动物类型定义一个“有一个”关系,这是动态的,我们不想在这里硬编码所有选项。有没有办法说动物有很多动物,但是在地图上有名字,而不仅仅是一个数组?

1 个答案:

答案 0 :(得分:0)

我从未想过如何以我想要的方式继承这一点,所以我最终将动物定义为基本属性......

animals: attr(),

然后将我的对象放入其中并使用

访问数据
animals.dog.sound

var name = "dog";
animals[name].sound

并且这有效,尽管我们失去了模型继承系统的一些好处。对于这个应用程序,继承并不重要。