在Ember数据中,在两个对象之间形成关联的最佳方法是什么?

时间:2012-12-19 21:03:16

标签: javascript web-applications ember.js ember-data

假设某些DS.Model类Leaf属于类Tree,而一个Tree有多个leaves,即:

App.Leaf = DS.Model.extend({

    tree:   DS.belongsTo('App.Tree'),

});

App.Tree = DS.Model.extend({

    leaves:   DS.hasMany('App.Leaf'),

})

到目前为止,我正在手动操作Tree的叶子字段:

tree = App.store.create( App.Tree )
leaf = App.store.create( App.Leaf )
tree.get('leaves').pushObject( leaf )
App.store.commit()

现在这似乎有效,但事情变得奇怪了:

当我检查叶子的树字段时,我看到一个App.Tree实例在那里,id与树的实例匹配:

leaf.get('tree').get('id')  // outputs 1
tree.get('id')             // outputs 1

到目前为止还好。现在我检查树的叶子字段,我认为它是一个Ember可变数组,我看到了这个:

branch.get('leaves').content  // outputs [ 2 ]
leaf.get('id')                // outputs 1

所以我假设叶子mutable-array正在存储一个叶子id数组,除了它的id与叶子实例的id不匹配。

注意当leaf的id为2时,它存储在branch.leaves.content字段中为4,如果leaf id为3,则存储的id为6,等等。

1 个答案:

答案 0 :(得分:3)

在您的示例中,一切正常,访问内容变量branch.get('leaves')记录数组返回对象的clientId数组。

然而,这是一个例外,因为以任何其他方式访问属性将透明地访问对象本身。

在您的情况下,如果您想要使用ID branch.get('leaves').mapProperty('id')