2012-06-01 6 views
5

をトグルを実装し、私たちはjqueryの中でそれを行うのと同じ方法で、バックボーンで可逆的なアニメーションを実装したいと思います:BACKBONE.JSイベントで

$('a.contact').toggle(
function(){ 
    // odd clicks 
}, 
function(){ 
    // even clicks 
}); 

私の質問は、バックボーンのイベント構文でこれを行う方法であります? どのように機能、機能設定を模倣するのですか?

events : { 
    'click .toggleDiv' : this.doToggle 
}, 

doToggle : function() { ??? } 

答えて

14

バックボーンのビューイベントは、jQueryに直接委任され、コールバックメソッドを介してすべての標準DOMイベント引数にアクセスできます。だから、あなたは簡単に要素にjQueryのトグルメソッドを呼び出すことができます。


Backbone.View.extend({ 

    events: { 
    "click a.contact": "linkClicked" 
    }, 

    linkClicked: function(e){ 
    $(e.currentTarget).toggle(
     function() { 
     // odd clicks 
     }, 
     function() { 
     // even clicks 
     } 
    ); 
    } 

}); 
+0

ありがとう@Derick Bailey!私はこのようなことをすることができると考えましたが、currentTargetを使うのは私には起こりませんでした。 – Petrov

+5

これは正しい@Derickだとは思わない。 jQueryの2つのパラメータを切り替えると、偶数/奇数クリックでこれらの関数を呼び出すe.currentTargetにclickイベントハンドラが追加されます。これを使用すると、a.contactがクリックされるたびに、新しいハンドラが再度追加されます。 – johnkpaul

+0

うんうん。 P –

0

イベントを受け取るビュー内で切り替えたい要素はありますか?その場合:

+0

クリック時にdoToggleが発生するため、これを最適化することができます。あなたはクリックのターゲット要素として 'event.target'を持っていますので、' toggle:function(ev){$(ev.target).toggle()} 'はOKです。 – Deeptechtons

0

私は実際にeventsを使用してこれを行うだけでは、一緒に実際の流量を維持するためにtriggerを追加することであると信じています。このようにトグルを使用しなければならないのは正直なところでは少しぎこちないようです。

Backbone.View.extend({ 

    events: { 
    "click .button": "doToggle" 
    }, 

    doToggle: function(e){ 
    var myEle = $(e.currentTarget); 
    $(e.currentTarget).toggle(
     function() { 
     // odd clicks 
     }, 
     function() { 
     // even clicks 
     } 
    ); 
    myEle.trigger('click'); 
    } 

}); 

それはちょうど私がこの問題の解決策を探していたと私はちょうどそれについて昔ながらの方法を行ってきました

Backbone.View.extend({ 

    el: '#el', 

    initalize: function() { 
    this.render(); 
    }, 

    doToggle: { 
    var myEle = this.$el.find('.myEle'); 
    myEle.toggle(
     function() { 
     // odd clicks 
     }, 
     function() { 
     // even clicks 
     } 
    ); 
    }, 

    render: function(e){ 


    //other stuff 

    this.doToggle(); 

    return this; 
    } 

}); 
4

を使用するために、おそらくクリーナーです。私はまた私のhideText()メソッドを私のアプリの他のビューから見つけることができるようにしたかった。

他のビューから 'showmeState'のステータスを確認し、hideText()またはshowText()を実行することができます。私は、以下のコードをレンダリングと初期化のようなものを取り除いて単純化し、例をより明確にしようとしました。

var View = Backbone.View.extend({ 
    events: { 
    'click': 'toggleContent' 
    }, 
    showmeState: true, 
    toggleContent: function(){ 
    if (this.showmeState === false) { 
     this.showText(); 
    } else { 
     this.hideText(); 
    } 
    }, 
    hideText: function() { 
    this.$el.find('p').hide(); 
    this.showmeState = false; 
    }, 
    showText: function() { 
    this.$el.find('p').show(); 
    this.showmeState = true; 
    } 
}); 

var view = new View(); 
+0

これは完璧に動作します。受け入れられた回答は、少なくとも同じクラスのために複数のトグルイベントを実行していた私にとっては適切に機能しませんでした。 – iankit

関連する問題