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

时间:2015-07-10 15:31:03

标签: javascript backbone.js reactjs reactjs-flux

这是使用Backbone和React的example

他定义了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 个答案:

答案 0 :(得分: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。