私は現在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);
これにより、ビューごとに再定義することなく、作成した任意のビューからこのメソッドを呼び出すことができます。すごい!
以下は、 eventsオブジェクトが配置された状態で縮小されたビューです。
(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 から使用しているイベントです。そのため、iOS と Android での 300 ミリ秒のクリック イベントの遅延を回避するために、特定の要素でイベントが発生しclick
たときに手動でイベントをトリガーしています。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 基本型に追加するにはどうすればよいですか?