我正在努力限制由ArrayController表示的数据集,该数据集还依赖于ObjectController作为动作和计算属性的装饰器。当我定义一个计算的'结果'财产,让它返回内容'或者' arrangeContent',似乎我的ObjectController(itemController)完全被绕过,并没有引用'货物'模型包括在内。
路线:
App.ShipmentsManifestsRoute = Ember.Route.extend({
model: function() {
return this.store.find('manifest');
}
})
型号:
App.Shipment = DS.Model.extend({
from: DS.attr("string"),
tracking: DS.attr("string"),
manifest: DS.hasMany("manifest", { async: true }),
received: DS.attr("number", {
defaultValue: function() {
return moment(Firebase.ServerValue.TIMESTAMP);
}
})
});
App.Manifest = DS.Model.extend({
upc: DS.attr("string"),
quantity: DS.attr("number", { defaultValue: 1 }),
condition: DS.attr("string", { defaultValue: 'New' }),
status: DS.attr("string", { defaultValue: 'Accept' }),
title: DS.attr("string"),
notes: DS.attr("string"),
shipment: DS.belongsTo("shipment", { async: true }),
});
控制器:
App.ManifestController = Ember.ObjectController.extend({
actions: {
save: function() {
this.get('model').save();
}
},
receivedDate: function() {
return moment(this.get('shipment.received')).format('YYYY-MM-DD');
}.property('shipment.received')
})
App.ShipmentsManifestsController = Ember.ArrayController.extend({
itemController: 'manifest',
sortProperties: ['shipment.received'],
sortAscending: false,
results: function() {
return this.get('arrangedContent').slice(0, 10);
}.property('arrangedContent.[]')
})
另外值得注意的是,当使用'结果时,我的itemController操作似乎基本上不存在。渲染我的数据集。我有一些内联编辑功能,可以调用' save'对itemController的操作,Ember抛出了一个“保存”的错误。不存在。
如果我迭代{{#each controller}}而不是{{#each results}},这一切当然都有效。
我猜最终问题在于内容'不会返回控制器上可用的所有数据元素/属性/计算属性。
这种限制是否有最佳实践方法?
更新:
问题肯定与引用arrangeContent时缺少的itemController有关。当直接遍历ArrayController时,我的View正在引用App.ManifestController作为控制器。但是,当遍历arrangeContent时,我的View将引用App.ShipmentsManifestsController作为控制器。仍然不确定为什么会这样。
更新2:
基于此,看起来我的问题与Setting itemController on a filtered subset of an ArrayController's model
重复提供了涉及额外把手参数的变通方法,我将尝试。但是仍然喜欢关于这是预期行为还是错误的任何输入。