Heu*_*rat 11 ember.js ember-data
有没有人用ember-data建模数据树?
我会假设它会是这样的:
Node = DS.Model.extend({
children: DS.hasMany(Node),
parent: DS.belongsTo(Node)
});
Run Code Online (Sandbox Code Playgroud)
然而,我无法得到这个工作,导致相信:或者我在如何设置它,或者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 }
]
}
Run Code Online (Sandbox Code Playgroud)
任何有关此问题的提示/建议将不胜感激.
Sté*_*ond 14
有几件小事阻止你的小提琴工作:
该DS.hasMany函数要求String作为参数.不要忘记引号:DS.hasMany('Node')
在夹具定义中,hasMany关系不应该是后缀_ids或任何东西.只需使用普通名称即可.例如:{ id: 42, children: [2,3], parent_id: 17 }
应使用以下函数访问该length属性:DS.ManyArraygetroot.get('children.length')
默认情况下,fixture适配器模拟ajax调用.在find等待50毫秒后查询将填充记录.在你的小提琴中,root.get('children.length')电话来得太早了.您可以配置夹具适配器,以便进行同步调用:
App.store = DS.Store.create({
revision: 4,
adapter: DS.FixtureAdapter.create({
simulateRemoteResponse: false
})
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以在没有任何适配器的情
App.store.loadMany(App.Node, [
{ id: 1, children: [2, 3] },
{ id: 2, children: [], parent_id: 1 },
{ id: 3, children: [], parent_id: 1 }
]);
Run Code Online (Sandbox Code Playgroud)最后一个:似乎应该在全局范围内声明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'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3366 次 |
| 最近记录: |