我不明白为什么会收到此错误:TypeError:当使用Backbone和Requirejs时,State.setActive不是函数。
我删除了一些代码来简化。我错过了什么?感谢。
模型
define([
'jquery',
'backbone',
'underscore',
], function($, Backbone, _ ) {
'use strict';
var State = Backbone.Model.extend({
defaults: {
activeTask: ''
},
setActive: function(model){
State.set({activeTask : State.get('activeTask') === model.id ? '' : model.id});
}
});
_.extend(State, Backbone.Events);
return State;
});
查看
define([
'jquery',
'underscore',
'backbone',
'models/state-model',
], function ( $, _, Backbone, State) {
'use strict';
var TodoView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#todo-template').html()),
initialize: function () {
this.listenTo(this.model, 'change', this.render);
},
events: {
"dblclick .view" : "clickActive",
},
render: function(){
this.$el.toggleClass('done', this.model.get('done'));
this.$el.toggleClass('active', this.model.get('active'));
this.toggleVisible();
this.$el.html(this.template(this.model.toJSON()));
return this;
},
clickActive: function() {
State.setActive(this.model);
this.model.toggleActive();
}
});
return TodoView;
});
答案 0 :(得分:0)
State是一个构造函数,你必须实例化它。在模型中尝试这个(假设你想让它成为单身人士):
define([
'jquery',
'backbone',
'underscore',
], function($, Backbone, _ ) {
'use strict';
var State = Backbone.Model.extend({
defaults: {
activeTask: ''
},
setActive: function(model){
State.set({activeTask : State.get('activeTask') === model.id ? '' : model.id});
}
});
_.extend(State, Backbone.Events);
return State(); // <- change here
});
答案 1 :(得分:0)
您的问题是您没有在任何地方实例化您的状态模型。当您从州模块中return State
仅返回类。
如果State是一个 singleton ,那么你可以在它自己的模块中实例化它并返回它。否则,最好的选择可能是在创建实例化todo视图时传入模块。
例如
var state = new State();
var todo = new TodoView ({state: state, model: myModel});
在您的TodoView视图中
var TodoView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#todo-template').html()),
initialize: function (options) {
this.state = options.state;
this.listenTo(this.model, 'change', this.render);
},
...