订阅者(对于自定义事件)不存在.骨干.js
subscriber (for a custom event) doesn't exist. backbone.js
>我的应用程序中有HeaderView
视图。根据触发的路由,视图将获得自定义标题。视图已订阅headerview:titleChanged
事件。
标题视图.js
var HeaderView = Backbone.View.extend({
el: $('#header-region'),
initialize: function() {
bus.on('headerview:titleChanged', function(args) {
this.setTitle(args.title);
}, this);
this.render();
},
setTitle: function(title) { this.$el.find('.title').html(title); },
render: function() { return this; }
});
在路由器上.js
var AppRouter = Backbone.Router.extend({
initialize: function() { this.route('', 'defaultRoute'); }
});
// trying to create it before AppRouter even got initialized
new HeaderView();
var appRouter = new AppRouter();
appRouter.on('route:defaultRoute', function() {
_routeHandlers.renderDefaultContentRegion();
});
Backbone.history.start();
at router.js, _routeHandlers.renderDefaultContentRegion()
// trying to send message
bus.trigger('headerview:titleChanged', {title: 'heading text'});
问题是首先创建路由器,然后创建标头视图,因此没有headerview:titleChanged
收件人。
是否可以在触发默认路由之前渲染HeaderView
?我该如何处理?
HeaderView
大概是应用程序的重要组成部分,因此应该在应用程序启动期间创建它,问题是顺序正确。你可以劫持AppRouter#initialize
成为你的应用程序构造函数,让它在正确的时间创建HeaderView
:
var AppRouter = Backbone.Router.extend({
initialize: function() {
this.route('', 'defaultRoute');
new HeaderView();
bus.trigger('headerview:titleChanged', {title: 'heading text'});
}
演示:http://jsfiddle.net/ambiguous/dpSbB/
或者,您可以将所有初始化移动到单独的应用程序构造函数中,并让该构造函数按正确的顺序排列。这也为您提供了一个方便的位置来放置全局内容(例如事件总线),而不必担心污染全局命名空间。像这样:
var AppRouter = Backbone.Router.extend({
initialize: function() {
this.route('', 'defaultRoute');
},
//...
});
var app = {
bus: _({}).extend(Backbone.Events),
initialize: function() {
new HeaderView;
new AppRouter;
app.bus.trigger('headerview:titleChanged', {title: 'heading text'});
Backbone.history.start();
}
};
app.initialize();
演示:http://jsfiddle.net/ambiguous/eLyys/
相关文章:
- 正在将事件处理程序添加到不存在的类
- 当您尝试添加不存在的事件时,addEventListener 的行为是什么
- 使用 on() 将事件处理程序添加到尚不存在的元素
- 如果事件附加到不存在的元素,是否可以触发该事件
- 查找绑定在不存在元素上的事件
- 订阅者(对于自定义事件)不存在.骨干.js
- 只有从html set onclick事件调用代码声明函数时,该函数才不存在
- 触发不存在的jQuery事件和性能
- 在不存在的html元素上触发jQuery.click()事件
- 当元素最初不存在时,事件不会触发
- 即使类名不存在,Javascript事件仍会触发
- 如何向不存在的元素添加事件监听器(不需要jQuery)
- 当页面加载时,我是否必须为不存在的类处理不同的单击事件
- Casperjs CasperError:无法在不存在的选择器上调度鼠标下移事件
- Casper:无法在不存在的选择器上调度鼠标下移事件
- Javascript在不存在的代码上添加onclick事件
- 使用onblur事件将值发送到javascript函数,如果不存在,该函数将添加.00
- <的事件处理程序;对象>如果数据不存在就会触发
- JavaScript onclick 事件,当“id”不存在时
- Angular2,订阅事件发射器上的属性不存在