2013-04-12 8 views
5

backbone.jsのrenderの機能、もっと具体的にはclickの機能でいくつかのイベントに結びついていますが、動作させることはできません。私のバックボーンビューのイベントセクションのためにbackbone.jsのイベントをrender()でトリガーします

App.ProductView = Backbone.View.extend({ 

className: 'title_products_tab', 
el: $('.title_products_tab'), 

events: { 
    'click .product_list .edit_product' : 'edit', 

は、私は次のように(ただし、非常に単純化された)のセットアップを持っています。ダウン私はバインド .edit_product clickイベントトリガーを希望するレンダリング関数内:動作しません

render: function(){ 
     console.log($._data($('.title_products_tab .product_list .edit_product')[0], "events")); 
     $('.title_products_tab .product_list .edit_product').trigger('click'); 

を、要素の_dataが定義されていない、しかし、私が知っているイベントは、私のビュー関数の残りのための作業を行いますそれに応じて。私はちょうど起動時にrenderまたは他の場所でイベントを引き起こすように見えません。

私は考えた:

this.trigger('click .product_list .edit_product'); 

しかし、再び運が動作しないだろう。

私もbindAllについて聞いたことがありますが、これを使うのは良い考えではないと聞きました。

どうすれば私のバックボーンビューのスタートアップイベントを起動できますか?

+0

は、あなたのRenderメソッドを呼び出している(私はあなたが本当にそれをあなたのやり方を行う必要がある場合は、手動でdelegateEventsを呼び出すことができると思いますか)?初期化メソッドでは? – Loamhoof

+0

@Loamhoof実際、initメソッド – Sammaye

答えて

2

だから、この興味深い(注:バックボーンのコード):見つけることが

var View = Backbone.View = function(options) { 
    this.cid = _.uniqueId('view'); 
    this._configure(options || {}); 
    this._ensureElement(); 
    this.initialize.apply(this, arguments); 
    this.delegateEvents(); 
}; 

特に最後の部分を。の後にイベントはバインドされてになります。したがって、renderメソッドが呼び出された後にinitializeメソッドが呼び出されます。イベントはまだ縛られていません。

+0

では、バックボーンによってサポートされている優雅な方法はありませんか? : – Sammaye

+0

まあまあ、あなたは単にあなた自身のメソッドを 'this.edit()'と呼ぶことができると思います。別のコード行を変更して、それほど悪くはありません;) – Loamhoof

+0

それは良いアイデアです。製品リストとそのリストのサイズが1の場合は、そのリストのユーザーのための唯一のエントリを選択します。その内部コードを使用してpogrammablyすると、私にとってはうれしくありません。私は現在、既存のフォームのフロントエンドを標準化する手段として、バックボーンを使用しています。ああ、私はちょうど代議員、ありがとう:) – Sammaye

関連する問題