我目前正在Marionette.View
使用我命名的方法扩展 Marionette 的基本类型quickClick
。我这样做是为了
配置/木偶/view.js
(function() {
define([
'backbone.marionette'
],
function(Marionette){
return _.extend(Backbone.Marionette.View.prototype, {
quickClick: function(e) {
$(e.target).get(0).click();
}
});
});
}).call(this);
这使我可以从我创建的任何视图中调用此方法,而不必为每个视图重新定义它。伟大的!
这是事件对象仍然存在的精简视图:
(function() {
define([
'backbone.marionette',
'app',
'templates'
],
function(Marionette, App, templates){
// Define our Sub Module under App
var List = App.module("SomeApp");
List.Lessons = Backbone.Marionette.ItemView.extend({
events: {
'tap .section-container p.title': 'quickClick'
}
});
// Return the module
return List;
});
}).call(this);
如果您想知道,tap
这是我从 Hammer.js 使用的一个事件,因为这是一个移动应用程序。click
因此,为了规避 iOS 和 Android 上 300 毫秒的点击事件延迟,当tap
事件在某些元素上触发时,我手动触发了一个事件。
现在,所有这些都工作得很好,我觉得有必要详细描述一下,以便可以根据上下文给出答案。
我的问题是必须定义events
对象。我完全不介意像上面那样具体的元素,.section-container p.title
. 但是,我想为每个视图中的所有 <a>
标签注册一个点击事件。在我创建的每个视图中继续定义此事件是没有意义的
events: {
'tap .section-container p.title': 'quickClick',
// I don't want to add this to every single view manually
'tap a': 'quickClick'
}
相反,我没有将它添加到每个视图中,而是将一个事件对象添加到config/marionette/view.js文件中,在该文件中我向Marionette.View
原型添加了一个方法。
这就是我所做的
(function() {
define([
'backbone.marionette'
],
function(Marionette){
return _.extend(Backbone.Marionette.View.prototype, {
events: {
'tap a': 'quickClick'
},
quickClick: function(e) {
$(e.target).get(0).click();
}
});
});
}).call(this);
当然,这是行不通的。每次我需要添加仅适用于该视图的事件时,都会覆盖事件对象。顺便说一句,tap a
当我的视图没有自己的事件对象时,它确实有效。
所以,我的问题是:如何将默认事件添加到 Marionette 的 Marionette.View 基本类型?