在Ember JS中控制器之间共享状态的正确方法

时间:2013-11-17 16:43:20

标签: javascript ember.js

图片中有ArrayController,其中显示了项目列表,每个项目都使用自己的ObjectController。现在你在ArrayController上有一个动作处理程序,它应该改变所有项目的一些属性。此属性不应该是持久性的,它仅适用于视图状态。一个例子是isSelected

查看Todos示例(http://todomvc.com/architecture-examples/emberjs/),它似乎与isCompleted属性非常相似。但主要区别在于此属性应存储在数据库中,因此模型在此处是正确的位置。

  

在Ember.js中,控制器允许您使用显示逻辑来装饰模型。通常,您的模型将具有保存到服务器的属性,而控制器将具有您的应用程序不需要保存到服务器的属性。

有没有办法遍历任何ArrayController的所有项目控制器并更新控制器的属性?这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

这对我来说听起来是正确的方法。引用的控制器用于保存不需要持久化的属性。这些属性保持应用程序状态和/或用于显示逻辑。

与Todos示例的主要区别在于您将修改itemController中的属性而不是模型中的属性。 (请记住,您不希望该属性存储在服务器上)。

我会做的事情会是这样的:

App.MyArrayController = Ember.ArrayController.extend({

    itemController: 'item',

    actions: {
        toggleSelection: function() {
            this.forEach(function(item, index) {
                item.toggleProperty('isSelected');
            });
        }
    }

});

如果您希望操作更改模型,则必须访问每个itemControlller的内容属性。

希望它有所帮助!