【问题标题】:Backbone.js: Natively passing attributes to models when fetched with a collectionBackbone.js:使用集合获取时,本机将属性传递给模型
【发布时间】:2013-10-01 02:55:32
【问题描述】:

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

new Model([attributes], [options]) 

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

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

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

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

collection.fetch([options])

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

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

【问题讨论】:

  • 您可以将属性作为选项传递给fetch,并覆盖集合中的parse 方法以在模型上设置传递的选项(属性)。查看parse

标签: backbone.js


【解决方案1】:

您可以将属性作为选项传递给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 结构,但希望这能让您朝着正确的方向开始。

【讨论】:

  • 很好的回答和解释,非常感谢!它非常简单明了。但令我惊讶的是,我们不能只在 Backbone Collection 上设置一个属性,然后将该属性传递给我们所有的模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多