1

在我的应用程序中,我有以下rawNodes属性,我将其用作应用程序范围的缓存:

var App = Ember.Application.createWithMixins({
    ...
    /**
      The rawNodes property is a nodes deposit to be used
      to populate combo boxes etc.

    **/
    rawNodes: null,

    getNodes: function () {
        if (!this.rawNodes) {
            this.rawNodes = this.Node.find();
        }
    },
    ...
});

在我的一些控制器中,我正在修改数据,这些数据也应该在这个通用缓存中更新。我想实现几个功能,更新给定节点,并删除给定节点。就像是:

updateNode: function(node_id, node) {
    this.rawNodes.update(node_id, node);
},

deleteNode: function(node_id) {
    this.rawNodes.delete(node_id);
}

但我真的不知道如何使用 ArrayController,即使这些操作是完全可能的。我在ArrayController 文档中没有看到此类过程的示例。有人可以提供一个例子,或者指出我正确的方向吗?

4

1 回答 1

1

与其使用rawNodes属性,我认为维护Node模型和NodesController. 分配model属性,setupController以便您可以确保始终获取节点。

由于这是一个应用程序范围的缓存,使用needsinApplicationController以便它可以委托给它的方法。

App.ApplicationRoute = Em.Route.extend({
  setupController: function() {
    this.controllerFor("nodes").set("model", App.Node.find());
  }
});

App.ApplicationController = Em.Controller.extend({
  needs: "nodes",
});

App.NodesController = Em.ArrayController.extend({
  getNodes: function() {
    // ...
  }
});

App.NodeController = Em.ObjectController.extend({
  updateNode: function() {
    // ...
  },

  deleteNode: function() {
    // ...
  }
});
于 2013-07-23T14:16:50.337 回答