2013-07-23 72 views
1

在我的應用我有以下rawNodes屬性,我使用的應用程序範圍內緩存:如何手動更新ArrayController

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

不是使用rawNodes財產,我認爲這可能是更有益的 保持Node模型和NodesController。將model屬性 與setupController分配,以便您可以確保總是獲取節點。

由於這是一個應用程序範圍的緩存,因此可以在ApplicationController中使用needs,以便它可以委託給它的方法。

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

這是有道理的,但仍然:我如何實現'updateNode'和'deleteNode'? – dangonfast

+0

這是一個很好的觀點。我想這兩種方法應該放在一個'NodeController'(答案更新)的單個資源上進行操作。就實際更新和刪除而言,這取決於模型。例如,如果你使用'ember-data',那麼你想修改這個屬性,然後調用'node.store.commit()'或'node.deleteRecord()'。如果你的模型是一個普通的'Ember.Object',那麼你必須使用'$ .ajax'自己實現這些方法,或者你需要爲你的應用程序使用任何你想要的。 – veidt