我正在研究高级数据模型,必须将其显示在列表中。
基本上该模型有三个类
列表:
Application.List = DS.Model.extend({
modules: DS.hasMany('module', {async: false})
});
包含许多模块:
Application.Module = DS.Model.extend({
position: DS.attr('number', {defaultValue: 0}),
module_category: DS.belongsTo('module_category'),
});
属于模块类别:
Application.ModuleCategory = DS.Model.extend({
position: DS.attr('number', {defaultValue: 0}),
});
问题是,页面必须在其类别下显示列表模块,这些模块按其position-attribute排序。在一个类别中,模块也按其位置属性排序。
-> category 1
- module
-> category 2
- module
- module
...
我使用一个属性来管理它,该属性将模块放入一个数组(按其位置和类别位置排序),并在第一次出现之前添加类别(对象)。所以数组的第一个对象总是一个类别(位置最低的那个),后跟属于该类别的模块
然后{{#each}}帮助程序使用此数组来显示。
到目前为止一切正常。
我还有一个拖放机制,因此用户可以更改类别和模块的位置。
但是不起作用的是位置属性的观察者,因此列表不会重新渲染。
}.property('model.modules.@each.position',
'model.modules.@each.module_category.position'),
第一部分(' model.modules。@ each.position')工作正常,每次模块移动时列表都会自动更新。
但是第二部分(' model.modules。@ each.module_category.position')不起作用,因此拖动类别不会强制重新渲染。
任何人都可以帮助我吗?
答案 0 :(得分:0)
@each只能深入一级。 (请参阅http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/的底部)如果您需要观看并且项目更深,请将其提升一级。
Application.Module = DS.Model.extend({
position: DS.attr('number', {defaultValue: 0}),
module_category: DS.belongsTo('module_category'),
module_category_position: Em.computed.alias('module_category.position')
});
并更新您的财产(通常模型在范围内,因此不需要明确说明,但我不知道您的范围在这里)
}.property('modules.@each.position',
'modules.@each.module_category_position'),