【发布时间】:2015-02-26 23:31:11
【问题描述】:
骨干网 1.1.2
下划线 1.7.0
jQuery 1.11.1
我有一个包含消息的集合。 我的消息可以是不同的类型(每种类型的 api 中的端点都不同,但我有一个端点允许我执行一个请求并获取所有消息)
当 Collection.fetch() 在基于现有属性填充集合时,我需要能够定义要使用的模型。
我已经按照这里的建议尝试过:A Backbone.js Collection of multiple Model subclasses 以及主干文档backbonejs.org
我的代码是这样的
model: function (attr, options) {
if(attr.hasOwnProperty('prop')){
return new PropModel(attr,options);
}
else if(attr.hasOwnProperty('another_prop')){
new AnotherPropModel(attr,options);
}
},
attr 值只是一大堆对象,所以如果不以某种方式遍历,这个解决方案对我来说毫无意义,而且很明显为什么它不起作用。
我是否正确处理了这个问题是否有其他方法可以做到这一点?
---更新----
我也尝试在集合的解析函数中这样做,但我的集合只是空的
parse: function (resp, options) {
_.each(resp, _.bind(function (r) {
console.log(this);
if(r.hasOwnProperty('prop')){
this.add(new PropModel(r));
}else{
this.add(new AnotherPropModel(r));
}
},this));
}
【问题讨论】:
-
模型之间是否存在关键差异?还是只是网址?
-
@anAgent 每个属性都不同,所以我想在渲染模板时对每个模型进行类型转换。我想我可以在模板中执行相同的逻辑,但我更喜欢将逻辑保留在模板之外,以便在需要时轻松切换模板引擎
-
url 对我来说也很重要,因为属性不同。即使消息可以分组,它们在我系统的其他区域也是独立的
-
看起来你在正确的道路上 - 如果需要,改变集合的 fetch url,然后在那个函数中你应该只需要返回模型函数(不是新的) -
if (attr.modelType === 'mailItem') { return MailItemModel; } -
@DominicTobias 在 attr 我没有模型类型。我有一个从 Json 解析的数组对象。
标签: javascript backbone.js backbone.js-collections backbone-model