Javascript 为什么在todo示例中使用主干网和requirejs时会出现错误?
我不明白为什么会收到这个错误:TypeError:State.setActive在使用主干和Requirejs时不是一个函数 为了简化,我删去了一些代码。我错过了什么?谢谢 型号Javascript 为什么在todo示例中使用主干网和requirejs时会出现错误?,javascript,backbone.js,requirejs,Javascript,Backbone.js,Requirejs,我不明白为什么会收到这个错误:TypeError:State.setActive在使用主干和Requirejs时不是一个函数 为了简化,我删去了一些代码。我错过了什么?谢谢 型号 define([ 'jquery', 'backbone', 'underscore', ], function($, Backbone, _ ) { 'use strict'; var State = Backbone.Model.extend({ def
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;
});
State是一个构造函数,您必须实例化它。在模型中尝试此方法(假设您希望它是单例):
定义([
“jquery”,
"骨干",,
“下划线”,
],函数($,主干,ux){
"严格使用",;
var State=Backbone.Model.extend({
默认值:{
活动任务:“”
},
setActive:功能(型号){
State.set({activeTask:State.get('activeTask')==model.id?'':model.id});
}
});
_.扩展(状态、主干、事件);
return State();//您的问题是没有在任何地方实例化状态模型。当您从状态模块返回状态时,它只返回类
如果State是单例的,那么您可以在它自己的模块中实例化它并返回它。否则,您最好的选择可能是在创建实例化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);
},
...
您没有在任何地方实例化您的状态模型。
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);
},
...