关于Backbone + React应用程序模型的困惑

pus*_*kin 6 javascript backbone.js reactjs reactjs-flux

这是一个使用Backbone和React 的例子.

他定义了一个Model:var _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();
  }
});
Run Code Online (Sandbox Code Playgroud)

我不明白为什么areAllComplete被应用于a Model而不是a Collection.

这不应该是一个Collection能够获得所有模型并检查该complete属性的函数.

同样,我希望getAll属于Collection- 获得所有模型.

这个例子似乎取代CollectionModel.

也许我不完全了解模型的使用方式.

iva*_*rni 2

在我看来,这个例子的使用Backbone.Model方式相当奇怪。

是向商店添加新待办事项的地方:

var id = Date.now();
  _todos.set(id, {
    id: id,
    complete: false,
    text: text
  });
}
Run Code Online (Sandbox Code Playgroud)

它基本上所做的是将每个待办事项设置为 的属性Model,使用 id 作为属性名称。它最终_todos.attributes看起来像下面这样

{
  "1436600629317": {
    "id": 1436600629317,
    "complete": false,
    "text": "foo"
  },
  "1436600629706": {
    "id": 1436600629706,
    "complete": false,
    "text": "bar"
  }
}
Run Code Online (Sandbox Code Playgroud)

这与您从 得到的输出相同_todos.toJSON()。我不知道他们为什么决定这样实现,如果他们尝试使用 Backbone.Sync,他们最终会得到一个不完全是 RESTful 的服务器 API。在不利用 Backbone 提供的任何功能的情况下使用 Backbone 似乎很奇怪。这里有对该change事件的引用,但我没有看到它在任何地方被使用。您可以使用任何常规 JS 对象轻松地重新实现该存储。

该示例似乎实际上从 Backbone 使用的唯一东西是Backbone.Events在调度程序中。您完全正确,使用 Collection 会更有意义,因为这样您实际上可以让它与基于 REST 的服务器 API 进行对话。该示例似乎只是为了使用 Backbone 而使用 Backbone。