图片中有ArrayController
,其中显示了项目列表,每个项目都使用自己的ObjectController
。现在你在ArrayController
上有一个动作处理程序,它应该改变所有项目的一些属性。此属性不应该是持久性的,它仅适用于视图状态。一个例子是isSelected
。
查看Todos示例(http://todomvc.com/architecture-examples/emberjs/),它似乎与isCompleted
属性非常相似。但主要区别在于此属性应存储在数据库中,因此模型在此处是正确的位置。
在Ember.js中,控制器允许您使用显示逻辑来装饰模型。通常,您的模型将具有保存到服务器的属性,而控制器将具有您的应用程序不需要保存到服务器的属性。
有没有办法遍历任何ArrayController
的所有项目控制器并更新控制器的属性?这是正确的方法吗?
答案 0 :(得分:0)
这对我来说听起来是正确的方法。引用的控制器用于保存不需要持久化的属性。这些属性保持应用程序状态和/或用于显示逻辑。
与Todos示例的主要区别在于您将修改itemController中的属性而不是模型中的属性。 (请记住,您不希望该属性存储在服务器上)。
我会做的事情会是这样的:
App.MyArrayController = Ember.ArrayController.extend({
itemController: 'item',
actions: {
toggleSelection: function() {
this.forEach(function(item, index) {
item.toggleProperty('isSelected');
});
}
}
});
如果您希望操作更改模型,则必须访问每个itemControlller的内容属性。
希望它有所帮助!