骨干-在初始化集合模型时传递数据

Backbone - passing data while initializing collection's model

本文关键字:数据 模型 集合 初始化 骨干      更新时间:2023-09-26

这就是我目前处理传递给集合模型的数据的方式。但我不确定这是否是最好的/正确的方法。

MyCollection:

define([ 'underscore',  'backbone','models/mymodel'], function(_, Backbone, myModel){
  var MyCollection = Backbone.Collection.extend({
    model: function (attr, options){
        options.data = {data: options.collection.options.some_data};
        return new myModel(attr, options);
    },
    initialize: function(options) {
        this.options = options;
    }
  });
  return MyCollection;
});

MyModel:

define([ 'underscore',  'backbone' ], function(_, Backbone){
  var MyModel = Backbone.Model.extend({
    defaults: {
    },
    initialize: function(attr, options) {
`       console.log(options.data)
    }
  });
  return MyModel;
});

这是在初始化集合模型时传递数据的唯一方法吗?

不行,在MyCollection中试试:

model: myModel,

如果你创建一个新的myModel,这样做:

var model = new myModel({
     prop1: 'something', // etc
});

您可以重写集合将属性散列转换为模型的方式。这是通过Collection._prepareModel完成的,你可以改变传递给这个方法的选项:

var MyCollection = Backbone.Collection.extend({
    model:  MyModel,
    _prepareModel: function(attrs, options) {
        options = _.extend({}, options, {
            data: this.options.some_data
        });
        return Backbone.Collection.prototype._prepareModel.call(this, attrs, options);
    },
    initialize: function(models, options) {
        // note that the options hash is the second argument
        this.options = options;
    }
});

和一个演示http://jsfiddle.net/nikoshr/jd5d8fmy/