有没有人用ember-data建模数据树?
我会假设它会是这样的:
Node = DS.Model.extend({
children: DS.hasMany(Node),
parent: DS.belongsTo(Node)
});
然而,我无法得到这种工作,导致相信:1)我在如何设置这个问题上是完全错误的,或者2)目前无法使用ember对树进行建模-数据。
我希望它是前者,而不是后者......
当然它可能是JSON ......我假设JSON应该是这样的形式:
{
nodes: [
{ id: 1, children_ids: [2,3], parent_id: null },
{ id: 2, children_ids: [], parent_id: 1 },
{ id: 3, children_ids: [], parent_id: 1 }
]
}
任何有关此问题的提示/建议将不胜感激。
有几件小事阻止你的小提琴工作:
该 DS.hasMany
function要求String作为参数。不要忘记引号: DS.hasMany('Node')
在夹具定义中, hasMany
关系不应该被后缀 _ids
什么的只需使用普通名称即可。例如: { id: 42, children: [2,3], parent_id: 17 }
该 length
的财产 DS.ManyArray
应该使用。访问 get
功能: root.get('children.length')
默认情况下,fixture适配器模拟ajax调用。该 find
查询将在等待50ms后填充记录。在你的小提琴, root.get('children.length')
打电话来得太早了。您可以配置夹具适配器,以便进行同步调用:
App.store = DS.Store.create({
revision: 4,
adapter: DS.FixtureAdapter.create({
simulateRemoteResponse: false
})
});
或者,您可以在没有任何适配器的情
App.store.loadMany(App.Node, [
{ id: 1, children: [2, 3] },
{ id: 2, children: [], parent_id: 1 },
{ id: 3, children: [], parent_id: 1 }
]);
最后一个:似乎应该在全球范围内声明Ember应用程序(没有 var
),应在应用范围内声明Ember数据模型(替换 var Node = ...
通过 App.Node = ...
)
完整示例:
App = Ember.Application.create();
App.store = DS.Store.create({
revision: 4
});
App.Node = DS.Model.extend({
children: DS.hasMany('App.Node'),
parent: DS.belongsTo('App.Node')
});
App.store.loadMany(App.Node, [
{ id: 1, children: [2, 3] },
{ id: 2, children: [], parent_id: 1 },
{ id: 3, children: [], parent_id: 1 }
]);
var root = App.store.find(App.Node, 1);
alert(root.get('children'));
alert(root.get('children.length'));
在我设置反向之前,这对我不起作用:
App.Node = DS.Model.extend({
children: DS.hasMany('App.Node', {inverse: 'parent'}),
parent: DS.belongsTo('App.Node', {inverse: 'children'}) });
不确定但是按照ember指南中给出的例子
App.Post = DS.Model.extend({
comments: DS.hasMany('App.Comment')
});
JSON应该将关系编码为ID数组:
{
"post": {
"comment_ids": [1, 2, 3]
}
}