2015-07-10 40 views
6

這是一個使用Backbone和React的example關於Backbone + React應用程序中模型的混淆

他定義了一個Modelvar _todos = new Backbone.Model();

,然後將兩種功能吧:

var TodoStore = _.extend(_todos, { 
    areAllComplete: function() { 
    return _.every(_todos.keys(), function(id){ 
     return _todos.get(id).complete; 
    }); 
    }, 
    getAll: function() { 
    return _todos.toJSON(); 
    } 
}); 

我不明白的是爲什麼areAllComplete被應用於Model,而不是到Collection

不應該這是一個Collection函數,它會得到它的所有模型,並檢查complete屬性。

同樣,我期望getAll屬於一個Collection - 獲取所有的模型。

該示例似乎用Collection替換爲Model

也許我不完全理解模型是如何使用的。

+1

我不明白你爲什麼要混合Backbone和Flux。 – Mathletics

+1

Re:model v collection,這取決於你如何將它們存儲在服務器上。在這裏看來,這個模型實際上是一個todos的列表,每個項目都被鍵入作爲該模型的一個屬性。整件事對我來說似乎很愚蠢。 – Mathletics

+0

@Mathletics爲什麼我不應該一起使用這兩個理由是有道理的嗎? React只是「MVC中的V」,對吧?我想使用Backbone進行路由和存儲。我一直在考慮這個[方法](http://www.toptal.com/front-end/simple-data-flow-in-react-applications-using-flux-and-backbone)。 – pushkin

回答

2

這個例子在我看來是以相當單純的方式使用Backbone.Model

This就是它增加新的待辦事項商店:

var id = Date.now(); 
    _todos.set(id, { 
    id: id, 
    complete: false, 
    text: text 
    }); 
} 

什麼它基本上做的是設置每一個待辦項目爲Model的屬性,使用id作爲屬性名稱。它結束了_todos.attributes看起來像下面

{ 
    "1436600629317": { 
    "id": 1436600629317, 
    "complete": false, 
    "text": "foo" 
    }, 
    "1436600629706": { 
    "id": 1436600629706, 
    "complete": false, 
    "text": "bar" 
    } 
} 

這就是你從_todos.toJSON()得到的結果相同。我不知道他們爲什麼決定像這樣實現它,如果他們嘗試使用Backbone.Sync,他們最終會得到一個不完全RESTful的服務器API。在沒有利用Backbone提供的任何東西的情況下使用Backbone似乎很奇怪。有一個參考change事件here,但我沒有看到它在任何地方使用。你可以使用任何普通的JS對象輕鬆地重新實現該商店。

這個例子似乎實際上是從Backbone使用的唯一東西是在調度器中的Backbone.Events。你完全正確的說使用一個Collection會讓你更有意義,因爲那樣你就可以使它與一個基於REST的服務器API交談。這個例子似乎只是爲了使用Backbone而使用Backbone。