2016-05-24 4 views
0

私はドキュメントからバックボーンを学んでいます。イベントのコンテキストがどのように機能するかの例を教えてください。 オプションの最後の引数を、コールバックが呼び出されたときにバックボーンのイベントコンテキストはどのように機能しますか?

はこのためにコンテキスト値を供給するために渡す:私は本当に彼らは以下の意味を理解していないmodel.on(「変更」、this.renderを、this)または model.on({change:this.render}、this)。

答えて

3

これはイベントリスナーです。例えば、この場合には、「変更」イベントが発生した場合:たとえば、

model.on('change', this.render, this) 

最初のパラメータは、イベントタイプです

2番目のパラメータは、呼び出す関数です。モデルが変更された場合、この関数を呼び出してみましょう。

第3はコンテキストです。 ( 'this')は、クリックしているコンテキストを表します。たとえば、入力ボックスをクリックしている場合、$ elは入力ボックスになります。あなたはこれを言及しない場合。あなたの「this」はウィンドウオブジェクトになります。例えば

var SomeModelView = Backbone.View.extend({ 
    initialize: function() { 
    this.model.on('change', this.render, this); 
    }, 
    render: function() { 
    // render a template 
    console.log("Template Rendered"); 
    } 
}); 

JSFiddle:http://jsfiddle.net/8AH3t/169/

警告:

常に代わりに使用してthis.model.onのthis.listenToを使用することをお勧めします。

this.listenTo(this.model, 'change', this.render); 

なぜですか?

.remove()メソッドを呼び出しは、 "変更" イベントハンドラは、(私たちの 機能をレンダリング)まだバインドされています。したがって、DOM要素が の場合、ビューオブジェクト自体は決してメモリから解放されません。

出典:http://ozkatz.github.io/avoiding-common-backbonejs-pitfalls.html

+1

あなたべき 'はconsole.log(この);'この例では...私はそれはOPが –

+0

ええ何このコンソールログを希望に理解していない何だと思いますか?文脈としてそれを追加する点は何ですか?それなしではまだ動作しませんか? – akantoword

+1

@jlei私は応答を追加しました。基本的に「this」はスコープ/コンテキストです。私が添付したjsfiddleを確認してください。入力ボックスをクリックしている場合は、入力ボックスのスコープになります。そして、$ elはそのボックスのID /クラスになります。 – TechnoCorner

関連する問題