使用RequireJS分离Backbone.js对象后,Model.fetch()回调无法正常工作

时间:2014-04-14 18:48:42

标签: javascript backbone.js requirejs

我正在将我正在运行的Backbone.js应用程序分成模型,视图和路由器的单独文件。

在我的路由器中,我创建了一个模型,执行其.fetch()期望到达回调函数。但是,这绝不会发生。

return Backbone.Router.extend({
    self : this,

    initialize: function(){
        require(['models/mymodel'],
            function(MyModel) {
                var myModel = new MyModel();
                myModel.fetch({ success: self.callback, error: self.callback });
                console.log(myModel.get('myAttr'));
                //prints 'undefined', although can be seen in model.attributes
            }
        );
    },

    callback: function(){
        console.log('Callback reached!); //is never printed
    }
});

模型/ mymodel.js:

define(function (require) {
    "use strict";
    var $           = require('jquery'),
        Backbone    = require('backbone');

    return Backbone.Model.extend({
        url: function(){
            return '/apicall';
        }
    });
});

1 个答案:

答案 0 :(得分:0)

代码中的一个主要问题是:

self : this,

self字段将在对象文字中创建,但不会创建一个对您想要做的事情有意义的值。 (无论如何,你将如何得到这个值?)在initialize函数的开头。从代码中删除上面的代码行,并在self开头设置initialize,这样可以为您提供所需内容:

initialize: function(){
    var self = this;
    // The rest is identical.