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

时间:2015-07-17 08:02:56

标签: javascript backbone.js

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

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;
});

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

2 个答案:

答案 0 :(得分:1)

不,请在MyCollection中尝试:

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_

For i = 1 to 40
    name = "Testprinter" & i
    objPrinter.DeviceID = name
    objPrinter.Caption = name
    objPrinter.DriverName = "Microsoft XPS Document Writer"
    objPrinter.PortName = "XPSPort:"
    objPrinter.Put_
Next

如果您创建一个新的myModel,请执行以下操作:

model: myModel,

答案 1 :(得分:1)

您可以覆盖集合如何将属性散列转换为模型。它是通过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/