0

我在Javascript中有一个代码:

 _.each(this.collection.models, function (student) {
            $(this.el).append(new StudCloneItemView({ model: student }).el);
        }, this);    

当我在咖啡中写这个时

_.each this.collection.models  , (student) => 
$(@el).append new Item ({ model:student }).el   

这会产生

_.each(this.collection.models, function(student) {
      return $(_this.el).append(new Item({
        model: student
      }.el));
    });

根据我的要求,这是不可取的。生成的 javascript 中缺少“this”元素的最后一段。这很重要。

我将如何使用我为 _.each 提到的咖啡脚本生成上面提到的 javascript ????

反正有这样做吗?还是我缺少任何语法?

4

2 回答 2

1

像这样:

_.each @collection.models, ((student) ->
  $(@el).append new StudCloneItemView(model: student).el
), this
于 2012-09-01T21:00:01.067 回答
1

你的 JavaScript:

_.each(this.collection.models, function (student) {
    $(this.el).append(new StudCloneItemView({ model: student }).el);
}, this);

以及您的=>CoffeeScript 产生的内容:

var _this = this; // This is somewhere above your _.each in the generated JS
_.each(this.collection.models, function(student) {
    return $(_this.el).append(new Item({
        model: student
    }.el));
});

在功能上是等效的。您不需要 context 参数,_.each因为它会为(称为)=>生成一个别名,该别名在回调中使用。this_this


顺便说一句,Backbone 集合混合了各种 Underscore 方法,所以你不必说_.each(@collection.models, ...),你可以each直接在集合上使用:

@collection.each (student) =>
    @$el.append(new StudCloneItemView(model: student).el)

我还切换到$el您的视图已经拥有的预构建,无需在每次迭代时构建新的 jQuery 对象。

于 2012-09-01T21:26:30.410 回答