Backbone模型是一个函数?
Backbone Model is a function?
我有以下功能,调用时失败:
getAll: function() {
return _todos.toJSON();
}
_todos.toJSON is not a function
它告诉我。
打印 _todos
出于某种原因给了我一个功能 function child()
。
为什么会这样?
这是我的 Backbone.Model
:
var _todos = Backbone.Model.extend();
getAll()
函数在我的 Collection
:
var TodoCollection = Backbone.Collection.extend({
model: _todos,
getAll: ...
});
编辑:
我实际上正在将 Backbone 与 React 连接起来,因此这可能会改变我的操作方式。
除了getAll
我还有这个:
areAllComplete: function() {
return _.every(this.pluck('complete'), true);
}
我一直在关注的一个 example 似乎将 getAll
和 areAllComplete
放在 Model
中并且根本不使用 Collection
。我无法理解它,因为我希望它成为 restful,我添加了 Collection
并移动了 getAll
和其中的另一个。
也许,这不是我想要的。
编辑 2:
根据警告,getAll
的输出应为 Object
而不是 array
。我可能应该将这些功能添加到 Model
而不是 Collection
。需要多考虑一下。
我认为这变成了另一个问题...
collection model 属性 用于指定 class collection 包含的模型,并用于在您通过时创建适当的模型原始数据到您的 collection。此外,根据您的代码,如果它确实有效,您将拥有一个只有一个模型的 collection。
除此之外,为了获得 collection 中所有模型的 JSON,您可以调用它的 toJSON 方法
例如todoCollection.toJSON();
或者,如果您特别希望在 getAll 函数中使用它(也许您想在返回数据之前执行其他操作),您可以执行以下操作
var TodoCollection = Backbone.Collection.extend({
model: Todo,
getAll: function () {
//do something
return this.toJSON();
}
});
//here we are passing in the data directly, but you might get it with a fetch call
var todoStore = new TodoCollection(models);
var todosJson = todoStore.getAll();
另一件需要注意的事情是 backbone 命名 convention 是 classes 使用 PascalCase 并且实例使用 camelCase .
那是因为Backbone.Model.extend
returns一个构造函数。当您通过 model
属性 将其传递给集合时,您只是让集合知道它应该包含哪种模型。
要获取整个集合的 JSON,请对集合实例调用 toJSON()
。
var collection = new TodosCollection();
// add models
collection.toJSON();
如果您想要 JSON 用于某个特定型号,请通过集合 API 获取对它的引用(at
、findWhere
、get
等) 并对该引用调用 toJSON()
。
var model = collection.at(0);
model.toJSON();
我有以下功能,调用时失败:
getAll: function() {
return _todos.toJSON();
}
_todos.toJSON is not a function
它告诉我。
打印 _todos
出于某种原因给了我一个功能 function child()
。
为什么会这样?
这是我的 Backbone.Model
:
var _todos = Backbone.Model.extend();
getAll()
函数在我的 Collection
:
var TodoCollection = Backbone.Collection.extend({
model: _todos,
getAll: ...
});
编辑:
我实际上正在将 Backbone 与 React 连接起来,因此这可能会改变我的操作方式。
除了getAll
我还有这个:
areAllComplete: function() {
return _.every(this.pluck('complete'), true);
}
我一直在关注的一个 example 似乎将 getAll
和 areAllComplete
放在 Model
中并且根本不使用 Collection
。我无法理解它,因为我希望它成为 restful,我添加了 Collection
并移动了 getAll
和其中的另一个。
也许,这不是我想要的。
编辑 2:
根据警告,getAll
的输出应为 Object
而不是 array
。我可能应该将这些功能添加到 Model
而不是 Collection
。需要多考虑一下。
我认为这变成了另一个问题...
collection model 属性 用于指定 class collection 包含的模型,并用于在您通过时创建适当的模型原始数据到您的 collection。此外,根据您的代码,如果它确实有效,您将拥有一个只有一个模型的 collection。
除此之外,为了获得 collection 中所有模型的 JSON,您可以调用它的 toJSON 方法
例如todoCollection.toJSON();
或者,如果您特别希望在 getAll 函数中使用它(也许您想在返回数据之前执行其他操作),您可以执行以下操作
var TodoCollection = Backbone.Collection.extend({
model: Todo,
getAll: function () {
//do something
return this.toJSON();
}
});
//here we are passing in the data directly, but you might get it with a fetch call
var todoStore = new TodoCollection(models);
var todosJson = todoStore.getAll();
另一件需要注意的事情是 backbone 命名 convention 是 classes 使用 PascalCase 并且实例使用 camelCase .
那是因为Backbone.Model.extend
returns一个构造函数。当您通过 model
属性 将其传递给集合时,您只是让集合知道它应该包含哪种模型。
要获取整个集合的 JSON,请对集合实例调用 toJSON()
。
var collection = new TodosCollection();
// add models
collection.toJSON();
如果您想要 JSON 用于某个特定型号,请通过集合 API 获取对它的引用(at
、findWhere
、get
等) 并对该引用调用 toJSON()
。
var model = collection.at(0);
model.toJSON();