如何手动更新ArrayController

时间:2013-07-23 13:56:41

标签: ember.js ember-data

在我的应用程序中,我有以下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 documentation中没有看到这种程序的例子。有人可以提供一个例子,还是指出我正确的方向?

1 个答案:

答案 0 :(得分:1)

我认为它可能更有用,而不是使用rawNodes属性 维护Node模型和NodesController。分配model属性 使用setupController,这样您就可以确保始终获取节点。

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

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() {
    // ...
  }
});