未在集合中实例化主干模型
Backbone model not instantiating in collection
我有一个类似的主干模型
define([
'underscore',
'backbone'
],function( _,Backbone) {
var Task = Backbone.Model.extend({
//api url
url:'',
methodToURL: {
'read': './api/tasks/index',
'create': './api/tasks/task',
'update': './api/tasks/task',
'delete': './api/tasks/task'
},
sync: function(method, model, options) {
options = options || {};
options.url = this.methodToURL[method.toLowerCase()];
Backbone.sync(method, model, options);
}
});
return Task;
});
和一个收集
define(['underscore','backbone','models/task'],function( _,Backbone,Task) {
var TaskCollection = Backbone.Collection.extend({
//Model
model:Task,
//api url
url:'',
methodToURL: {
'read': './api/tasks/index',
'create': './api/tasks/task',
'update': './api/tasks/task',
'delete': './api/tasks/task'
},
sync: function(method, model, options) {
options = options || {};
options.url = this.methodToURL[method.toLowerCase()];
Backbone.sync(method, model, options);
},
//construct
initialize: function() {
this.sort_key = 'end';
this._model = new Task();
this.fetch();
},
comparator: function(a,b) {
a = a.get(this.sort_key);
b = b.get(this.sort_key);
return a > b ? 1
: a < b ? -1
: 0;
},
mark_complete: function(task_id) {
var task_status = 0;
console.log(this.model);
this.model.save({id:task_id,task_status:task_status});
},
mark_incomplete: function(task_id) {
var task_status = 1;
console.log(this.model);
this.model.save({id:task_id,task_status:task_status});
},
sort_by_status: function() {
this.sort_key = 'task_status';
this.sort();
},
sort_by_task_tag: function() {
this.sort_key = 'task_group';
this.sort();
}
});
return TaskCollection;
});
当运行mark_complete方法时,模型会被记录到控制台,但它会记录"function (){ parent.apply(this, arguments); }
"并表示"function (){ parent.apply(this, arguments); } has no method 'save'
";我猜模型应该被实例化,这样集合就可以访问它的方法,那么问题出在哪里呢?
model
属性只是Collection
在向集合添加模型时使用的构造函数。当您尝试将数据输入到集合时,它旨在使您的生活更轻松。在向TaskCollection
添加Task
模型时,您不必总是调用构造函数,只需输入一个JavaScript对象,它就会执行同样的操作。
因此,当您希望插入模型而不将model
属性设置为TaskCollection
时,您的代码就是这样的
taskCollection.add(new Task({
name: "Get Milk",
description: "We're out of milk. There's a sale going on at the local supermarket."
}));
// If you wanted to just input just the JSON object without calling the
// constructor, then you can't.
如果设置了model
属性,那么您的代码就是这样的
taskCollection.add({
name: "Get Milk",
description: "We're out of milk. There's a sale going on at the local supermarket."
});
正如您所看到的,您不需要调用Task
构造函数;CCD_ 11的实例将为您调用它。
这就是为什么TaskCollection
的实例将只将model
属性设置为Task
的实际构造函数,而不是初始化版本。
相关文章:
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- spine.js在启动时填充模型实例
- 如何在用户输入时实例化数组
- 在requirejs中共享实例化对象
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- Angular重命名模块后未能实例化模块
- ng重复中的ng模型-初始化唯一作用域属性
- Backbone relational无法实例化两个RelationalModel对象
- 我应该如何用javascript实例化这个日期
- AngularJS出错-无法实例化模块
- 挖空.js:等待视图模型实例化完成
- 未在集合中实例化主干模型
- 主干.js:如何在集合/其他模型中实例化模型
- 将模型实例传递到已初始化的主干视图
- 强制路由实例化新的控制器/视图对,而不是更改模型
- 从主干网中的现有模型实例化模型
- 闭包中的Javascript实例化.如何使工厂和模型独立
- 在实例化视图后将主干模型分配给视图
- 如何在新的主干中捕获验证错误?实例化期间的模型
- 在knockout.js中为applyBindings实例化视图模型时,绑定会中断