有人使用 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 }
]
}
对于这个问题的任何提示/建议将不胜感激。
有一些小事情会阻止你的小提琴工作:
the DS.hasMany
函数要求一个字符串作为参数。不要忘记引号:DS.hasMany('Node')
在夹具定义中,hasMany
关系不应后缀_ids
或任何东西。只需使用简单的名称即可。例如:{ id: 42, children: [2,3], parent_id: 17 }
the length
的财产DS.ManyArray
应使用get
功能:root.get('children.length')
-
默认情况下,fixture 适配器模拟 ajax 调用。这find
查询将在等待 50 毫秒后填充记录。在你的小提琴中,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 = ...
by 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'));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)