使用RequireJS拆分文件后,Backbone.js listenTo(model,'change'
Backbone.js listenTo(model,'change',callback) callback not reached after splitting files with RequireJS
我正在将我正在工作的Backbone.js应用程序拆分为模型、视图和路由器的单独文件。
启动我的路由器:
window.App = Backbone.View.extend({
initialize: function() {
require(["routers/my-router"], function (MyRouter) {
var myRouter = new myRouter();
Backbone.history.start();
});
}
});
在我的路由器文件routers/my-router.js
中,我正在侦听一个型号的更改事件:
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
:Uncaught TypeError: undefined is not a function
callback
:Uncaught ReferenceError: callback is not defined
this.callback
:Uncaught TypeError: Cannot read property 'onManualDestination' of undefined
这个问题是根据Yurui的回答编辑的。
好吧,有几件事。
要执行Router的initialize方法,您必须创建一个Router实例,然后使用Backbone.history.start(),如下所示:
//define router:
var Router = Backbone.Router.extend({});
//instantiate a router
new Router();
//start router!
Backbone.history.start();
在您的示例中,路由器没有实例化,也没有启动。此外,不会触发模型更改。
这是我的工作示例:
//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
的使用,但它不应该影响本例中的任何内容。
jsfiddle:http://jsfiddle.net/4KLCZ/
相关文章:
- Ember Data DS.Model's set函数不起作用
- Selenium WebDriver and JavaScript change
- Bootstrap 3 Datepicker v4:dp.show和dp.change事件在Datepicker内联时不
- 带有.change()的AJAX不起作用
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- Rails将JavaScript对象存储到Model的有效方式
- 从 Javascript 中设置 ng-model name
- Nano Scroller在引导程序DropDown和Model Box中不起作用
- Model中的Typeahead返回空值以形成输入字段
- Change iframe src
- Backbone model.change() not firing
- model.on('change', function()) 无法正常工作
- Angularjs:Ng Model和Ng Change在控制台中未定义
- 在ng-model被设置为select>之前,Ng-change执行
- 在IE9和ie10中,angularjs的ng-change不会触发ng-model-onblur指令
- 当ng-model被改变时,Angular - ng-change不会触发
- 他没有选择ng-model change angularjs
- 如何使用ng-change查看未定义的ng-model变量值
- 使用RequireJS拆分文件后,Backbone.js listenTo(model,'change'
- Angular JS:在ng-change上获取ng-model