我遇到了使用骨干网.js的情况,那里有一组模型,以及一些有关模型的其他信息。例如,假设我要返回一个金额列表:它们具有与每个模型关联的数量。现在假设每个数量的单位总是相同的:说夸脱。然后,从服务中获取的json对象可能类似于:
{ dataPoints: [ {quantity: 5 }, {quantity: 10 }, ... ], unit : quarts }
现在,骨干集合没有将这种元数据与集合本地关联的真正机制,但有人向我提出了以下问题:在集合上设置属性-可以通过.meta(property,[value])样式函数扩展集合的骨干js-很好的解决方案。但是,自然地,我们希望能够像上面那样从json响应中干净地检索此数据。
.meta(property,[value])
Backbone.js为我们提供了该parse(response)功能,该功能使我们可以结合url属性指定从何处提取集合的模型列表。但是,我没有办法知道如何在不重载的情况下实现更智能的功能,fetch()这会删除已经可用的部分功能。
parse(response)
url
fetch()
我的问题是:是否有比重载fetch()(并尝试将其称为超类实现)更好的选项来实现我想要的目标?
谢谢
就我个人而言,我会将Collection另一个包装在其中Model,然后覆盖parse,如下所示:
Collection
Model
parse
var DataPointsCollection = Backbone.Collection.extend({ /* etc etc */ }); var CollectionContainer = Backbone.Model.extend({ defaults: { dataPoints: new DataPointsCollection(), unit: "quarts" }, parse: function(obj) { // update the inner collection this.get("dataPoints").refresh(obj.dataPoints); // this mightn't be necessary delete obj.dataPoints; return obj; } });
该Collection.refresh()调用将使用新值更新模型。meta按照先前的建议将自定义值传递给Collection可能会使您无法绑定到这些元值。
Collection.refresh()
meta