与RequireJS分裂文件后,Backbone.js的listenTo(型号,'变',回调)回调没有达到 [英] Backbone.js listenTo(model,'change',callback) callback not reached after splitting files with RequireJS

查看:216
本文介绍了与RequireJS分裂文件后,Backbone.js的listenTo(型号,'变',回调)回调没有达到的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我分手了我的工作Backbone.js的应用,转化为模型,视图和路由器单独的文件。

I'm splitting up my working Backbone.js application, into seperate files for models, views and routers.

开始我的路由器:

window.App = Backbone.View.extend({
    initialize: function() {
        require(["routers/my-router"], function (MyRouter) {
            var myRouter = new myRouter();
            Backbone.history.start();
        });
    }
});

在我的路由器文件路由器/我-router.js ,我听一个模型的变化事件:

In my Router file routers/my-router.js, I am listening to a change event of a Model:

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

return Backbone.Router.extend({
    initialize: function() {
        var self = this;
        require([],
            function(){
                var model = new Backbone.Model.extend({});
                self.listenTo(model, 'change', self.callback);
                model.trigger('change');
            }
        );
    },

    callback: function() {
        console.log('callback reached!');
    }
});
});

我收到以下错误定义回调不同的方式:


  • self.callback 未捕获类型错误:未定义不是一个函数

  • 回调未捕获的Ref​​erenceError:回调没有定义

  • this.callback 未捕获类型错误:无法读取属性'onManualDestination未定义

  • self.callback: Uncaught TypeError: undefined is not a function
  • callback: Uncaught ReferenceError: callback is not defined
  • this.callback: Uncaught TypeError: Cannot read property 'onManualDestination' of undefined

这个问题是玉蕊的回答后可进行编辑。

This question was edited after Yurui's answer.

推荐答案

确定,几件事情。

执行路由器的初始化方法,你必须创建一个Router实例,然后使用Backbone.history.start(),像这样:

to execute a Router's initialize method, you will have to create a Router instance, and then use Backbone.history.start(), like so:

//define router:
var Router = Backbone.Router.extend({});

//instantiate a router
new Router();

//start router! 
Backbone.history.start();

在您的例子中,路由器没有实例化,也开始了。
同时,该模型的变化不会被触发。

In your example, the router is not instantiated, nor started. also, the model change is not triggered.

这是我的工作的例子:

//define a model.
var Model = Backbone.Model.extend({});

//define a router
var Router = Backbone.Router.extend({
    initialize: function () {
        var self = this;

        setTimeout(function () {
            var myModel = new Model({});
            self.listenTo(myModel, 'change', self.callback);

            //triggers change right away so you can see the callback output
            myModel.trigger('change');
        }, 1000);
    },
    callback: function () {
        console.log('Callback reached!');
    }
});

//instantiate the router!
new Router();

//here's when router.initialize() is called.
Backbone.history.start();

请注意:我用的setTimeout 来替换使用 requirejs ,但它不应该在这个例子中有什么影响

NOTE: i used setTimeout to replace the use of requirejs but it shouldn't affect anything in this example.

的jsfiddle: http://jsfiddle.net/4KLCZ/

jsfiddle: http://jsfiddle.net/4KLCZ/

这篇关于与RequireJS分裂文件后,Backbone.js的listenTo(型号,'变',回调)回调没有达到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆