Backbone.js 主干模型是一个函数?
我有以下函数,调用时失败:Backbone.js 主干模型是一个函数?,backbone.js,reactjs,Backbone.js,Reactjs,我有以下函数,调用时失败: getAll: function() { return _todos.toJSON(); } \u todos.toJSON不是一个函数,它告诉我 打印\u todos出于某种原因为我提供了一个函数函数child() 为什么会这样 这是我的主干。型号: var _todos = Backbone.Model.extend(); getAll()函数位于我的集合中: var TodoCollection = Backbone.Collection.exten
getAll: function() {
return _todos.toJSON();
}
\u todos.toJSON不是一个函数,它告诉我
打印\u todos
出于某种原因为我提供了一个函数函数child()
为什么会这样
这是我的主干。型号:
var _todos = Backbone.Model.extend();
getAll()
函数位于我的集合中
:
var TodoCollection = Backbone.Collection.extend({
model: _todos,
getAll: ...
});
编辑:
我实际上是在用React连接主干网,所以这可能会改变我的做法
除了getAll
之外,我还有:
areAllComplete: function() {
return _.every(this.pluck('complete'), true);
}
我一直在关注的一个问题似乎将getAll
和areAllComplete
放在模型中,根本不使用集合。我搞不懂它的意思,因为我想让它一直保持安静,我添加了集合
,并移动了getAll
,还有一个在里面
也许,这不是我想要的
编辑2:
根据警告,getAll
的输出应该是对象
而不是数组
。我可能应该将这些函数添加到模型
而不是集合
。我们需要更多地考虑这个问题
我认为这变成了另一个问题……collection属性用于指定集合包含的模型类,并用于在将原始数据传递到集合时创建适当的模型。此外,根据您的代码,如果它确实起作用,您将拥有一个只有一个模型的集合
除此之外,为了获得集合中所有模型的JSON,您可以调用它的方法
例如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();
另一个需要注意的是主干命名是对类使用PascalCase,对实例使用camelCase。collection属性用于指定集合包含的模型类,并用于在将原始数据传递到集合时创建适当的模型。此外,根据您的代码,如果它确实起作用,您将拥有一个只有一个模型的集合
除此之外,为了获得集合中所有模型的JSON,您可以调用它的方法
例如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();
另一个需要注意的是主干命名是对类使用PascalCase,对实例使用camelCase。这是因为backbone.Model.extend
返回一个构造函数。当您通过model
属性将其传递给集合时,您只是让集合知道它应该持有哪种模型
要获取整个集合的JSON,请在集合实例上调用toJSON()
var collection = new TodosCollection();
// add models
collection.toJSON();
如果您需要一个特定模型的JSON,那么通过集合API(at
,findWhere
,get
等)获取对它的引用,并对该引用调用toJSON()
var model = collection.at(0);
model.toJSON();
这是因为Backbone.Model.extend
返回一个构造函数。当您通过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()
,因为它还没有定义,我如何进行调用<代码>此。
因作用域而不起作用。或者您建议将该功能粘贴到外部?我希望能够调用TodoStore.getAll()
其中TodoStore
是集合的一个实例
。您仍然可以在集合中包含getAll()
函数,它将在TodoCollection原型上定义。要使用它,您需要创建一个集合实例,类似于var TodoStore=new TodoCollection()然后是ToDoStore.getAll()代码>其中mygetAll()
返回TodoCollection.toJSON()
?我得到了TodoCollection.toJSON不是一个函数
@Pushkin我已经更新了我的答案,希望它能澄清一点(除非我误解了你的意图)。哈哈,也许我不明白我想做什么。我更新了我的问题。我明白了。如果要在我的集合中保留我的getAll()
,因为它还没有定义,我如何进行调用<代码>此。
因作用域而不起作用。或者您建议将该功能粘贴到外部?我希望能够调用TodoStore.getAll()
其中TodoStore
是集合的一个实例
。您仍然可以在集合中包含getAll()
函数,它将在TodoCollection原型上定义。要使用它,您需要创建一个集合实例,类似于var TodoStore=new TodoCollection()然后是ToDoStore.getAll()代码>其中mygetAll()
返回TodoCollection.toJSON()
?我得到了TodoCollection.toJSON不是一个函数
@Pushkin我已经更新了我的答案,希望它能澄清一点(除非我误解了你的意图)。哈哈,也许我不明白我想做什么。我已经更新了我的问题。