2011-10-20 37 views
0

我正在創建一個簡單的文件夾列表,點擊時將標記爲選中,即他們的模型將其selected屬性更改爲true。我希望此選擇是排他性的 - 所有其他文件夾都應該在標記爲選定文件夾之前標記爲未選中。Backbone:如何使用單個命令更新所有模型的屬性

對了,我可以想到通過集合循環來改變每個模型的屬性。有沒有更簡單的方法可以實現這個目標?

回答

3

在我正在進行的一個項目中,我們在集合級別維護'selected'項目。我們添加了getCurrent()setCurrent(model)方法,收集將引發一個change:selection事件。這對我們來說真的很好。

- 編輯:每個請求的代碼示例.--

以下是我們base.collection.js這是我們爲我們的所有藏品延伸的一部分。你會注意到我們可以根據id或實際模型設置電流,所以col.setCurrent(123)col.setCurrent(anInstanceOfAModel)都可以工作。也呼籲setCurrent爲已經是當前模型不會觸發更改事件

setCurrent: function (id) 
    { 
     var isModel = !(_.isString(id) || _.isNumber(id)); 

     var triggerChange = this._setupCurrent(isModel 
           ? id 
           : this.get(id)); 

     if (triggerChange) 
      this.trigger("change:current", this._current); 

     return this.getCurrent(); 
    }, 

    getCurrent: function() 
    { 
     return this._current; 
    }, 

    _setupCurrent: function (current) 
    { 
     var old = this._current; 
     this._current = current; 

     if (current && old && old.id == current.id) 
      return false; 

     return true; 
    }, 
+0

您的模型是否也有'selected'屬性? OP似乎對此感到疑惑。 –

+0

不是 - 主要是因爲我覺得它很尷尬(因爲它似乎是OP)必須遍歷每個項目才能解除它們。 – timDunham

+0

@timDunham反正你可以發佈代碼示例?我正在嘗試做一些與你所完成的非常相似的事情。提前致謝! ;) – muffs

2

您還可以有一個「狀態」對象,您可以在其中存儲上次選擇的文件夾。

然後,您將其中一個更改回未選中狀態,而無需遍歷整個集合。

相關問題