有没有人用ember-data建模数据树?
我认为它会是这样的:
Node = DS.Model.extend({
children: DS.hasMany(Node),
parent: DS.belongsTo(Node)
});
然而,我无法得到这个工作,导致相信:1)我在如何设置这个问题上是完全错误的,或者2)目前无法建模使用ember-data的树。
我希望它是前者,而不是后者......
当然它可能是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 }
]
}
非常感谢有关此问题的任何提示/建议。
答案 0 :(得分:14)
有几件小事阻止你的小提琴工作:
DS.hasMany
函数请求String作为参数。不要忘记引号:DS.hasMany('Node')
在夹具定义中,hasMany
关系不应该由_ids
或其他任何东西加上后缀。只需使用普通名称即可。例如:{ id: 42, children: [2,3], parent_id: 17 }
应使用length
函数访问DS.ManyArray
的{{1}}属性:get
默认情况下,fixture适配器模拟ajax调用。等待50毫秒后,root.get('children.length')
查询将填充记录。在你的小提琴中,find
来电太早了。您可以配置夹具适配器,以便进行同步调用:
root.get('children.length')
或者您可以在没有任何适配器的情况下将数据加载到商店:
App.store = DS.Store.create({
revision: 4,
adapter: DS.FixtureAdapter.create({
simulateRemoteResponse: false
})
});
和最后一个:似乎应该在全局范围内声明Ember应用程序(无App.store.loadMany(App.Node, [
{ id: 1, children: [2, 3] },
{ id: 2, children: [], parent_id: 1 },
{ id: 3, children: [], parent_id: 1 }
]);
),并且应在应用程序范围中声明Ember数据模型(替换{{1} } var
)
完整示例:
var Node = ...
答案 1 :(得分:1)
在我设置反向之前,这对我不起作用:
App.Node = DS.Model.extend({
children: DS.hasMany('App.Node', {inverse: 'parent'}),
parent: DS.belongsTo('App.Node', {inverse: 'children'}) });
答案 2 :(得分:-3)
不确定但是按照ember指南中给出的例子
App.Post = DS.Model.extend({
comments: DS.hasMany('App.Comment')
});
JSON应该将关系编码为ID数组:
{
"post": {
"comment_ids": [1, 2, 3]
}
}