Backbone.js将此绑定到$ .each

时间:2012-04-27 16:08:32

标签: javascript jquery backbone.js

我正在使用backbonejs并在我拥有的方法中:

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

但是,因为它位于$.eachthis.$el未定义。

我有_.bindAll(this, 'methodName'),它们可以在每个之外工作。所以,现在我需要绑定它吗?

任何帮助都会很棒!谢谢

2 个答案:

答案 0 :(得分:11)

您正在使用Backbone,因此您拥有下划线,这意味着您拥有_.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();
});

以下是两个Underscore方法的快速演示:http://jsfiddle.net/ambiguous/dNgEa/

答案 1 :(得分:2)

在循环之前设置局部变量:

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