1

私はbackbonejsを使用しており、メソッド内では次のようになっています。

$.each(response.error, function(index, item) {
    this.$el.find('.error').show();
});

ただし、にあるため$.eachthis.$elは定義されていません。

私は_.bindAll(this, 'methodName')それぞれの外で動作するものを持っています。だから、今私はそれを内にバインドする必要がありますか?

どんな助けでも素晴らしいです!ありがとうございました

4

2 に答える 2

11

バックボーンを使用しているため、アンダースコアがあり、次のものがあることを意味します_.each

_.each(list, iterator, [context])

要素のリストを繰り返し処理し、それぞれを順番にイテ​​レータ関数に渡します。コンテキストオブジェクトが渡された場合、反復子はコンテキスト オブジェクトにバインドます。

だからあなたはこれを行うことができます:

_.each(response.error, function(item, index) {
    this.$el.find('.error').show();
}, this);

または、次を使用できます_.bind

$.each(response.error, _.bind(function(index, item) {
    this.$el.find('.error').show();
}, this));

または、同じものを何度も見つけているので、事前計算して気にするのをやめthisます:

var $error = this.$el.find('.error');
$.each(response.error, function(index, item) {
    $error.show();
});

2 つのアンダースコア アプローチの簡単なデモを次に示します: http://jsfiddle.net/ambiguous/dNgEa/

于 2012-04-27T17:07:49.800 に答える
2

ループする前にローカル変数を設定します。

var self = this;
$.each(response.error, function(index, item) {
    self.$el.find('.error').show();
});
于 2012-04-27T16:11:03.593 に答える