1

假设您正在定义一个 Backbone.js 模型。从我们拥有的文档中...

new Model([attributes], [options]) 

这似乎非常适合将一些默认属性传递给模型。传递时,模型会自动继承这些属性及其各自的值。没事做。惊人的!

另一方面,假设我们有该模型的集合。

new Backbone.Collection([models], [options])

好的,很酷,我们可以传递一些初始模型和一些选项。但是,我没有初始模型,也没有需要通过的选项,所以让我们继续。我将从服务器获取模型。

collection.fetch([options])

好吧,我没有任何选择,但我想传递一些属性以在获取每个模型时添加到它。我可以通过将它们作为选项传递,然后将它们添加到模型初始化中的属性散列中来做到这一点,但这似乎很混乱。

他们是 Backbone.js 的原生方式吗?

4

1 回答 1

2

您可以将属性作为选项传递给fetch并覆盖集合的parse方法以扩展响应中传递的选项(属性)。

解决方案如下所示:

var Collection = Backbone.Collection.extend({
  url:'someUrl',
  parse:function(resp,options) {
    if (options.attributesToAdd) {
      for (var i=0;i<resp.length;i++)
        _.extend(resp[i],options.attributesToAdd);
    }
    return resp;
  }
});

然后在调用fetch集合时添加属性,您可以:

var collection = new Collection();

collection.fetch({
  attributesToAdd:{foo:'bar',more:'foobar'}
});

您可能需要稍微调整代码以适应您的JSON结构,但希望这能让您朝着正确的方向开始。

于 2013-10-01T04:23:11.690 回答