这可能是一个简单的问题,但我花了一些时间,无法弄清楚该怎么做。

我有一个Backbone模型,并且试图将myData作为参数传递给namedAttributes中的MyModels。绑定并没有真正的帮助,因为“ this”是namedAttributes的上下文,而不是RS.Models.MyModel。

有什么建议么?

RS.Models.MyModel = Backbone.Model.extend({

    myData: {},

    namedAttributes: {
      "collection": _.bind(function(attrs) {
        // "this" is the wrong context. How do I access myData from here?
        var options = {myData: this.myData};
        return new RS.Models.MyModels(attrs, options)
      }, this)
    },

    initialize: function(attributes, options) {
      if (options && options.columnData) {
        this.myData = options.myData;
      }
    },
});

最佳答案

您需要使namedAttributes为一个函数,以便它具有正确的上下文(然后在运行时对其进行评估)。出于这个原因,Backbone的许多属性也可以是返回值的函数(例如className,attribute等),并且在您要执行逻辑来决定返回值是什么的情况下。下划线为此具有一个称为_.result的函数:

RS.Models.MyModel = Backbone.Model.extend({

    myData: {},

    namedAttributes: function() {
      return {
        collection: new RS.Models.MyModels({myData: this.myData})
      };
    },

    initialize: function(attributes, options) {
      if (options && options.columnData) {
        this.myData = options.myData;
      }
    },
});


您将通过namedAttributes获得_.result(this, 'namedAttributes')的值。

如果它绝对是一个函数,并且您想将attrs传递给它,则this.namedAttributes.call(this, attrs)将起作用。 _.result用于当它可以是对象或函数时。

10-07 21:46