主干保存嵌套集合
Backbone save nested collection
我有这样的模型:
defaults:{
id:'',
name: '',
type: new typeCollection()
},
parse: function(response){
var self = this;
var typeCol = typeCollection;
typeCol.fetch({ data: $.param({ id: response.id}),
success: function (collection, response) {
self.set('type', response);
}}
});
return response;
...
console.log(model.attribute)
//{"id":"7","name":"myName","type":[{"tid": "2","tName": "myTName"},{"tid": "3","tName": "mOTName"}]}
视图:
Marionette.ItemView.extend({
template: _.template(myTpl),
initialize: function(options){
this.model = options.model;
this.listenTo(this.model, 'change', this.render);
},
events:{
"click #saveChanges":"saveIt"
},
saveIt: function(e) {
e.preventDefault();
var form = this.$('#basic_info');
var arr = form.serializeArray();
var data = _(arr).reduce(function(acc, field) {
acc[field.name] = field.value;
return acc;
}, {});
this.model.save(data);
console.log(data)//{"id":"7","name":"yourName","tName[0]": "myTName","tName[1]": "mOTName"}
模板:更新:将索引添加到t名称
<form id="basic_info">
<input name="myName" value="<%= myName%>" type="text">
<% _.each(type, function(item, index) { %>
<input name="tName[index]" value="<%= item.tName %>" type="text">
<% }); %>
</form>
这是有效的,它完成了输入字段。但我无法更新(save())嵌套的"类型"集合。如何正确更新嵌套集合而不丢失与其父模型的"连接"?
感谢你的回答和评论,我使它工作,我不得不改变模板和我如何从表单中获取数据的方式。
这是解决方案:
模板:
<% _.each(type, function(item) { %>
<div data-nested="true" data-item-id="<%= item.tid %>" >
<input name="itemName" value="<%= item.tName %>" type="text">
</div>
<% }); %>
视图:
//serialize only static part of the form
var rootInfo = _.object(_.map($('.serialize :input').serializeArray(), _.values))
var type= [];
form.find('div[data-nested=true]').each(function(){
var self = $(this);
var tid = self.data('item-id');
var tName= self.find('input[name=itemName]').val();
type.push({'tid' :tid,
'tName':tName })
})
//merge basic info with type
_.extend(rootInfo , {type:type})
this.model.save(rootInfo);
Form只能有一个名称为tName/tid的字段,因此请尝试将模板更改为
<form id="basic_info">
<input name="myName" value="<%= myName%>" type="text">
<% _.each(type, function(item) { %>
<input name="tName[]" value="<%= item.tName %>" type="text">
<% }); %>
</form>
然后你就有能力在保存之前获取所有数据并进行操作
您将在formData中获得一个字段数组,因此需要将所需字段设置为模型字段的数组。如果您需要代码示例-请在jsbin上创建测试,并提供链接-社区将添加代码
相关文章:
- React:使用索引变量更新嵌套集合
- 显示嵌套json集合的主干
- 通过对象的嵌套集合进行递归总是在第一个叶节点处终止
- 如何处理嵌套在关系模型中的集合
- 帆嵌套集合
- 在嵌套对象(例如 Backbone.js集合)中搜索文本
- 有关为嵌套集合构建模板的建议
- 具有深度嵌套集合的 Angular 性能和数据绑定
- 木偶.js复合视图 - 如何在不嵌套的情况下渲染模型和集合
- 当更新流星中的嵌套集合时,如何为更新路径传递变量
- 将嵌套文档集合转换为具有父引用的模型树结构
- 正在重新构造数组的嵌套集合
- 使用嵌套的“”循环迭代流星中的集合;forEach”;
- 主干保存嵌套集合
- 如何处理backbone.js中的嵌套集合
- 我应该使用嵌套集合来组织我的backbone.js应用程序吗
- Symfony 2:如何处理表单中的嵌套集合
- JS/MongoDB:检查对象(集合文档)中是否存在嵌套字段
- 主干嵌套集合
- 如何使用SailsJS填充嵌套的相关集合?