1

mustache lambda 函数是否可以访问其视图实例this

Backbone.View.extend ({
    initialize: function (options) {
        this.collection = options.collection  // large backbone.collection 
    },

    parseContent: function (){
        return function (id, render){
            //this.collection is undefined below
            return this.collection.get (render (id)).get ('stuff);
        }
    }
});

里面试过了,_.bind (this.parseContent, this)里面还是自带模型上下文。initialize ()thisparseContent ()

我当前的解决方法是保存this.collection到我的应用程序根名称空间并从那里访问。想知道有没有一种更清洁的方法可以按照上面的意图做到这一点?

感谢您的建议。

4

1 回答 1

1

如果你要传递返回的函数parseContent,你应该

  1. 在返回之前绑定该函数_.bind
  2. 并使用_.bindAllininitialize强制每个实例thisparseContent

你的观点可以写成

Backbone.View.extend ({
    initialize: function (options) {
        _.bindAll(this, 'parseContent');

        // you don't need this.collection = options.collection
        // collection is part of the special variables handled By Backbone
    },

    parseContent: function (){
        var f = function (id, render){
            console.log(this.collection);
        }

        return _.bind(f, this);
    }
});

还有一个演示http://jsfiddle.net/nikoshr/VNeR8/

于 2013-09-17T08:00:07.940 回答