如何在amd架构的模型(骨干)中调用集合函数?

时间:2013-12-12 15:31:18

标签: javascript backbone.js model-view-controller amd

//文件一

//如何在ChoicesModel setnextOne函数(对象)中调用choicesCollection default

var ChoicesModel = Backbone.Model.extend({
    defaults: function() { 
      // this.collection ??
      return {
        seq_id: choicesCollection.setnextOne(),
        subject: ""
      };
    },
    initialize: function() {

        console.log(this);

      if (!this.get("seq_id")) {
        this.set({"seq_id": this.defaults().seq_id});
      }
    }
});

//文件二

var ChoicesCollection = Backbone.Collection.extend({
    model:ChoicesModel,
    setnextOne: function() {
      if (!this.length) return 0;
      return +this.last().get('seq_id') + 1;
    },
    // sort
    comparator: function(choice) {
      return choice.get('seq_id');
    }
});

//文件三

var choicesCollection =  new ChoicesCollection();

2 个答案:

答案 0 :(得分:1)

更深入地了解Manikandan的答案......

如果查看骨干代码,您会看到以下内容(我删除了一些内容):

var View = Backbone.View = function(options) {
  options || (options = {});
  _.extend(this, _.pick(options, viewOptions));
};

// List of view options to be merged as properties.
var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];

正如你可以看到_pick用于从传入的选项中列出一组属性的子列表。然后将View原型扩展为对这些属性进行扩展(如果它们已经被传递)。

简而言之,如果您将这些属性作为选项传递,则会自动将以下属性抛出到您的视图中:

model,collection,el,id,attributes,className

答案 1 :(得分:0)

根据主干documentation,您应该在将模型添加到集合后通过this.collection访问集合。或者,您需要在创建模型时发送收集选项。