Javascript 为什么在todo示例中使用主干网和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

我不明白为什么会收到这个错误:TypeError:State.setActive在使用主干和Requirejs时不是一个函数

为了简化,我删去了一些代码。我错过了什么?谢谢

型号


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);
    },
   ...