木偶的复合视图事件未触发
Marionette's CompositeView event not firing
我在使用Marionette的CompositeView时遇到问题。我使用模板在复合视图中渲染我的模型,并希望向其添加单击事件。不知何故,我无法使用复合视图上的events: { "click": "function" }
处理程序使事件正常工作......我做错了什么?
var FactsMenuItem = Backbone.Marionette.ItemView.extend({
template: tmpl['factsmenuitem'],
initialize: function() {
console.log('factsmenuitem');
},
onRender: function() {
console.log('factsmenuitem');
}
});
var FactsMenuView = Backbone.Marionette.CompositeView.extend({
template: tmpl['factsmenu'],
itemView: FactsMenuItem,
itemViewContainer: ".subs",
events: {
'click': 'blaat'
},
blaat: function() {
console.log('this is not working');
},
initialize: function() {
this.model.get('pages').on('sync', function () {
this.collection = this.model.get('pages');
this.render();
}, this);
},
onRender: function() {
console.log('render factsmenu');
}
});
var FactsLayout = Backbone.Marionette.Layout.extend({
template: tmpl['facts'],
regions: {
pages: ".pages",
filter: ".filter",
data: ".data"
},
initialize: function(options) {
this.currentPage = {};
this.factsMenu = new FactsMenu();
this.factsView = new FactsMenuView({model: this.factsMenu});
},
onRender: function() {
this.pages.show(this.factsView);
}
});
编辑:我删除了一些使问题不清楚的代码......
问题在于复合视图的非集合视图(模型视图??)的事件没有被触发。我认为这与 FactsLayoutView 实例化复合视图的方式有关......
该问题是由区域的渲染方式引起的。在我的FactsLayout中,使用了以下代码:
initialize: function(options) {
this.currentPage = {};
this.factsMenu = new FactsMenu();
this.factsView = new FactsMenuView({model: this.factsMenu});
},
onRender: function() {
this.pages.show(this.factsView);
}
显然,您无法在 onRender 函数上显示视图......我不得不更改FactsLayout的初始化方式:
var layout = new FactsLayout({
slug: slug
});
layout.render();
var factsMenu = new FactsMenu({ slug: slug });
var factsView = new FactsMenuView({model: factsMenu});
layout.pages.show(factsView);
也许我不太理解你的问题,但如果您需要侦听从复合视图中的项目视图触发的事件,您应该执行以下操作。
在项目视图中test
方法。
this.trigger("test");
在复合视图中initialize
方法。
this.on("itemview:test", function() { });
请注意,当从CollectionView
的项(CompositeView
是CollectionView
)触发事件时,它前面加上itemview
前缀。
希望对您有所帮助。
编辑:再次阅读您的问题,我认为这不是正确的答案,但是,关于您的问题,我想复合视图中的单击是由项目视图捕获的。你能更好地解释你的目标吗?
相关文章:
- 取消绑定主干视图事件
- 在Angular ui路由器中,如何将事件从一个视图发送到另一个视图
- 如何测试主干视图是否正确侦听特定事件
- Ember视图未响应用户启动的事件
- 主干视图触发全局事件
- WinJs中的视图状态更改事件在哪里
- IBM BPM如何在Coach视图中处理按键事件
- 更改el属性时未激发主干视图事件
- 缓存主干视图及其事件
- 为什么每次重新渲染父视图时都需要重新委派子视图的事件
- 如何在angularjs中检查Kendo树视图数据绑定事件
- 骨干视图触发事件两次
- 当我认为它不应该重新渲染视图时,如何防止 Meteor 在 html 选择 dom 单击事件上重新渲染视图
- 将多个事件动态添加到多个 Web 视图
- 触发的事件被接收两次.如何找到鬼视图
- MVC-部分视图中元素上的Javascript事件
- 视图焦点的AngularJS事件
- 是否有任何事件“;在$scope摘要完成时”;或“;在视图刷新时”;在Angular.js中
- 如何在渲染新视图之前关闭所有事件
- Angular.js-Socket.io事件更新模型,而不是视图