1

私は現在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 基本型に追加するにはどうすればよいですか?

4

2 に答える 2

1

ビューを拡張するとき、「initialize」に追加の呼び出しを追加し、「events」プロパティを拡張して新しい呼び出しを含める必要がある場合があります。私の抽象的な見解では、関数があります:

inheritInit: function(args) { 
  this.constructor.__super__.initialize.apply(this, args);
  this.events = _.extend(this.constructor.__super__.events, this.eventsafter);
},

次に、拡張ビューで呼び出すことができます

initialize: function(options) {
  this.inheritInit(arguments)
  //..some extra declarations...
}

また、「イベント」プロパティを通常の方法で使用できます。

于 2013-10-25T16:13:00.980 に答える