主干模型:保存时保留集合
Backbone Model: Keep Collection when saving
我有一个简单的主干模型,看起来像这样:
(function () {
App.Company = Backbone.Model.extend({
defaults: {},
urlRoot: "/Contacts/Companies",
initialize: function () {
var contactPersons = this.get("ContactPersons") || [];
this.set("ContactPersons", new App.ContactPersonCollection(contactPersons));
}
});
})();
每当我将模型保存到服务器时,ContactPersons
集合都会重置为Array
。
保存模型后,我真的有必要手动将其转换为集合吗?
更新:这按预期工作--请参阅答案以获得更好的方法(IMHO)
(function () {
App.Company = Backbone.Model.extend({
defaults: {},
urlRoot: "/Contacts/Companies",
initialize: function () {
var contactPersons = this.get("ContactPersons") || [];
if (_.isArray(contactPersons)) {
this.set("ContactPersons", new App.ContactPersonCollection(contactPersons));
}
},
parse: function (response) {
if (response.ContactPersons && _.isArray(response.ContactPersons)) {
response.ContactPersons = new App.ContactPersonCollection(response.ContactPersons);
}
return response;
}
});
})();
从服务器发回数据时,如何处理响应?例如,如果您只是发回一个〔{},{},{〕,我认为Backbone不会自动知道将其视为集合。因此,它将ContactPersons
属性设置为它所得到的,即香草数组。
您可以做的是在模型中覆盖您的set函数,该函数将接受传入的对象数组,并适当地写入集合。参见此示例:
set: function(attributes, options) {
if (_.has(attributes, 'ContactPersons') && this.get("ContactPersons")) {
this.get('ContactPersons').reset(attributes.ContactPersons);
delete attributes.ContactPersons;
}
return Backbone.Model.prototype.set.call(this, attributes, options);
}
因此,基本上,只要您的服务器响应的名称空间正确(response.ContactPersons),那么在解析后,它就会将您的响应传递给set函数。集合数据被特殊地视为集合。在这里,我只是用新数据重新设置已经存在的集合。所有其他模型属性应继续传递到原始set()
。
更新-对自己的答案越来越怀疑
我一直想不出这个问题/答案。它当然有效,但我越来越不相信使用修改后的set()
比只在parse()
中做事要好。如果有人对使用经过修改的set()
与使用嵌套模型的parse()
之间的区别有意见,我真的很欢迎您的意见。
相关文章:
- 分派点击事件并保留击键修饰符
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Meteor-将选定窗体中的对象添加到集合中
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 提交后保留下拉选择的值
- 主干集合重置和解析
- 使用数据上的角度更改设置集合的第一个元素的动画
- 为集合分配大量的模型弹药
- 如何使用backbone.js从集合中获取模型名称
- Lodash从集合创建集合
- 刷新后保留对网页的更改
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 使用递归属性迭代保留属性结构
- Jquery html() 和保留元素名称
- 主干模型:保存时保留集合
- 从模型中检索骨干集合并将其保留为集合
- 在保留绑定的同时连接集合