ryb*_*ome 5 javascript backbone.js
我有一个名为的主干模型Member- 它包含会员数据,如名字,姓氏,电子邮件,电话等.它还包括我需要保存为集合的多值字段 - 这些是Degrees和Affiliations.
我fetch()在模型中调用方法时遇到的问题是基本数组和模型中的集合对象之间存在阻塞不匹配的问题.因为parse根据定义,应该返回一个要用于set而不是实际设置值的哈希值,所以我不可能以这种方式设置我的集合.例如 - 如果我返回一个Degrees类似于以下内容的JavaScript对象:{degrees: [{id: 1, title: "PhD"}]}那么这会将我的degree集合转换为平面数组.这是我的代码:
window.Models.Member = Backbone.Model.extend({
url: '/api/member',
initialize: function() {
_.bindAll(this);
this.set('degrees', new window.Collections.DegreesList());
this.fetch();
},
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
// When this is run, this.get('degrees') will now return a flat array rather than a DegreesList collection
setHash.degrees = _(response.degrees).each(function(item) {
return {id: item.id, title: item.title}
});
return setHash;
}
});
Run Code Online (Sandbox Code Playgroud)
我可以在我的解析函数中手动设置集合,但这似乎颠覆了Backbone的方式,而且hacky.
编辑:我通过执行以下操作暂时解决了问题:
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
this.get('degrees').reset( response.degrees );
return setHash;
}
Run Code Online (Sandbox Code Playgroud)
我怀疑这是最佳解决方案,但它现在肯定有效.我愿意接受更好的建议.
我使用与您提议的完全相同的解决方法,只是做了一些更改。
degreesDatainitialize我创建的集合中,如下所示:this.degrees = new Degrees().reset( this.get( "degreesData" ) );| 归档时间: |
|
| 查看次数: |
10230 次 |
| 最近记录: |