Backbone + React 应用程序中的模型混淆

Confusion about Models in Backbone + React application

这是一个 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

可能我不太明白模型是怎么用的

在我看来,该示例以一种相当奇怪的方式使用了 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.