我有一个区域的布局视图,在该区域我有一个项目视图触发一个事件,但似乎没有冒泡到布局视图.我做错了什么或是这样设计的行为?我假设itemview前缀未添加,因为父视图不是集合视图?无论哪种方式,事件都不会冒泡到布局视图.
layoutView = Marionette.Layout.extend({ template: "#layout-template",regions: { titleRegion: "#job-title-region" },triggers: { "save:clicked" : "onSaveClicked" },onSaveClicked: function (args) { alert('Clicked'); } }); childview = Marionette.ItemView.extend({ template: "#child-template",triggers: { "click .js-save": "save:clicked" } });
更新:
看到这个小提琴http://jsfiddle.net/7ATMz/11/我设法得到布局视图来监听子事件,但是我必须将其连接到布局视图本身之外,并打破封装.无论如何,我可以在布局视图中执行此操作吗?
谢谢,
乔恩
解决方法
触发器不太像这样工作:你的布局使用错误.触发器是给予特定交互(例如,点击)引发事件信号的便利.
你想要的是使用triggerMethod(https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.functions.md#marionettetriggermethod)来触发你的布局中的一个功能.参见http://jsfiddle.net/ZxEa5/基本上,你想要这个在你的演出功能:
childView.on("btn:clicked",function(){ layout.triggerMethod("childView:btn:clicked"); });
在你的布局中:
onChildViewBtnClicked: function(){ https://leanpub.com/marionette-gentle-introduction });
事件冒泡只会自动与收集复合视图,因为它们与项目视图紧密相关.如果您想要布局来监视其中的一个子视图,则需要自行设置.
无耻的插件:如果您想了解更多关于如何使用Marionette构建和清理代码的信息,您可以查看我的书(https://leanpub.com/marionette-gentle-introduction)中更详细的解释这一概念(及其应用)的内容.