2011-12-06 5 views
4

のセレクタのための変数を使用する:私はバックボーン内のイベントのためのセレクタとして変数を使用する必要があるが、私はこれを行う方法を見つけ出すことはできません何らかの理由でイベント

app.views.Selfcare = Backbone.View.extend({ 
    events: { 
     click window.parent.document .close : "closeWindow" 
    }, 
    closeWindow: function() { 
     //code 
    } 
}); 

私は別のを使用する必要があります私は "click.close"をクリックすることはできません: "closeWindow"。

お願いします。

答えて

7

私はBackbone.jsのソースコードを見て、ビューのeventsが関数であれば関数が呼び出され、戻り値がeventsオブジェクトとして使われていることが分かりました。

これはあなたのコードは次のように変更することができることを意味します

if (_.isFunction(events)) events = events.call(this); 

更新:

app.views.Selfcare = Backbone.View.extend({ 
    events: function() { 
    var _events = { 
     // all "standard" events can be here if you like 
    } 
    _events["events" + "with variables"] = "closeWindow"; 
    return _events; 

    }, 
    closeWindow: function() { 
    //code 
    } 
}); 

THISは、ソースコードの興味深い部分でありますJSFiddleで利用可能ですHERE **

+0

ニース。私は次の時間にこれを試してみて、あなたに伝えます。ありがとう。 – Flyingbeaver

+0

@Flyingbeaver私は愚かな例へのリンクで自分の答えを更新しました。がんばろう! :) – kubetz

+0

完璧に働いて、thx! – Flyingbeaver

1

ここに変数を使用できるかどうかはわかりません。組み込みイベントメソッド(documentationを参照)を使用してカスタムリスナーを追加した後、window.parent.documentにイベントリスナーを追加して、カスタムイベントをトリガーすることができます(Events.triggerメソッドを使用)。

app.views.Selfcare = Backbone.View.extend({ 
    initialize: function() { 
     _.bindAll(this, 'render', 'closeWindow'); 
     if(this.options.clickTarget) { 
      this.options.clickTarget.addEventListener('click', this.closeWindow, false); 
     } 
    }, 
    render: function() { 
     // Render to the DOM here 
     return this; // as per Backbone conventions 
    }, 
    closeWindow: function() { 
     // Stuff here 
    } 
}); 

// Usage: 
var mySelfcare = new app.views.Selfcare({ 
    clickTarget: window.parent.document 
}); 

私はそれが動作するはずだと思う。(あなたがそれを行うにはしたくない場合を除き)完全にバックボーンからこのイベントを分離するためにはるかに容易に、かつaddEventListenerをルートを下るだろう、と述べた

私はそれをテストしていませんが(1つまたは2つの構文上の誤りがあるかもしれません)

+0

例では、私もこのイベントを取ることを考えていましたが、私はたくさんあることができました。 Dzejkejソリューションは非常に興味深いようです。 – Flyingbeaver

+0

@Flyingbeaver:うん、ちょうどその解決策も見て、v。elegant :) – SquareFeet

関連する問題

 関連する問題