0

イベントのあるモデルには「ビュー」がありますclick。jQuery の Quicksand エフェクト プラグインを使用した後、オブジェクトはイベント ハンドラーを失います。backbone.js の標準メソッドを使用して、イベントのリスナーを追加しようとしました。

events: {
    "click .objContact"    : "openChat"
}

および同じツール jQuery delegate:

var self=this; 
this.$el.delegate('.objContact','click', function(){
    self.openChat();
});

live:

var self=this; 
this.$el.find('.objContact').live('click', function(){
    self.openChat();
});

しかし、clickイベントは消えます。何が問題なのですか?そして、どうすれば解決できますか?

UPD: 'Quicksand' の呼び出しは Backbone.Router にあるため (変更される可能性は、Backbone ではなく jQuery を使用して直接取得されます)、変更は Backbone.View では処理されません。

UPD 2:問題は次の方法で解決されます -clickイベントの処理をビューモデルからビューコレクションに移動することによって。とライブで扱われました(で動作しませんでしたon)

4

2 に答える 2

2

簡単な答え: 関数をリンクにリンクする代わりに、従来の ajax メソッドを使用します。

$('a.oldJqueryClass').click(function(){....

その関数をスタンドアロンにして、新しい関数を宣言する必要があります

function myfunction(params) {alert(params);}

古い学校の方法でそれを呼び出すリンクよりも:

<a href="#" class="oldJqueryClass" onclick="javascript:myfunction('My alert message')">Click here</a>

このようにして、複製された要素自体が関数の呼び出しを含み、流砂の複製によって壊れた dom の整合性を復元することを忘れることができます。

私は自分のプロジェクトでそれを行いましたが、うまくいきます。

于 2012-10-11T02:06:14.083 に答える
1

delegateEvents()関連する DOM エントリが変更または上書きされた後にを呼び出します。従来のバックボーン アプリでは、これは通常renderメソッドで行われますが、流砂がいつ、どこで魔法のように機能するか (私はそれについて何も知りません) を把握し、その呼び出しdelegateEventsで現在の要素のイベントを再アクティブ化する必要があります。ドム。

于 2012-09-08T20:37:42.540 に答える