1

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

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

但是,因为它在$.each,this.$el中是未定义的。

我有_.bindAll(this, 'methodName')哪些将在每个之外工作。那么,现在我需要将它绑定在里面吗?

任何帮助都会很棒!谢谢

4

2 回答 2

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();
});

这是两种下划线方法的快速演示: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 回答