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

Correct way to share state between controllers in Ember JS

本文关键字:方式 状态 共享 JS 控制器 之间 Ember      更新时间:2023-09-26

图像中有一个ArrayController,它显示项目列表,每个项目都使用自己的ObjectController。现在您在ArrayController上有了一个操作处理程序,它应该更改所有项的某些属性。此属性不应持久化,它仅用于视图状态。例如isSelected

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

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

是否有任何方法可以循环通过任何ArrayController的所有项目控制器并更新控制器的属性?这是正确的方法吗?

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

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

我会做的事情是这样的:

App.MyArrayController = Ember.ArrayController.extend({
    itemController: 'item',
    actions: {
        toggleSelection: function() {
            this.forEach(function(item, index) {
                item.toggleProperty('isSelected');
            });
        }
    }
});

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

希望它能有所帮助!