主干:如何保存模型集合中模型的属性更改
Backbone: How to save an attribute change of a model right from its collection?
这不是关于我对Backbone体系结构理解的具体但常见的问题。
所以我需要直接从列表中编辑产品属性。我为产品列表创建了产品骨干模型和产品骨干集合。
在列表中,您可以选择任何型号,系统应向下滑动此型号的"编辑界面"。
因此,我启动了要渲染列表的视图,并显示/编辑集合中的特定模型:
App.Views.ProductList = Backbone.View.extend({
el: '#content',
initialize: function() {
this.render();
},
events: {
'click #show': 'show', // to show model interface in the list
'click #save': 'save' // to save model changes in the list
},
show: function(e) {
var id = $(e.currentTarget).data('id');
$('#product' + id).slideToggle();
},
save: function(e) {
var id = $(e.currentTarget).data('id');
var form = $('#product' + id + ' form');
var model = this.collection.at(id);
model.set(form.serializeJSON());
model.save({
url: '/product'
});
},
render: function() {
var template = _.template($('#productList').html());
this.$el.empty().append(
template({
products: this.collection.toJSON()
})
);
return this;
}
});
所以,伙计们,我确信在更新模型的过程中,我使用了非常非常错误的模式。我认为收藏品能够倾听收藏品模型的变化。
我选择model.save()
的方式使用集合url而不是模型url,并且我不能覆盖集合url。请解释一下你将如何解决这个问题!
为了避免此类问题,我一直喜欢做的一件事是创建一个"列表视图"和一个"项目视图",并在列表视图上呈现多个项目视图。这允许我有两个独立的事件散列:一个在项目视图级别,另一个在列表视图级别。这样做还可以清楚地表明主干事件处理的方向(如果我们关注一个模型,则为项视图,如果我们关注集合,则为列表视图)。
还要记住,主干集合将所有模型事件代理到它们自己的事件触发器,因此可以执行collection.on("change:someModelAttr")
。所有这些回调也将得到受影响的模型。
最后描述的问题是因为在模型中我定义了url而不是urlRoot。
相关文章:
- 将多级 mongodb 文档转换为 Backbone.js 模型/集合
- 主干:如何保存模型集合中模型的属性更改
- 我应该何时/为什么从 BackboneJS 模型/集合扩展函数返回
- 主干 + 木偶 - 模型/集合的内存管理最佳实践
- 为什么预期的路线不使用帆.js蓝图 API 将项目添加到模型集合
- 主干模型/集合中的Javascript范围界定问题
- 使用Knockback.js过滤中的视图模型集合
- 正在清除主干模型/集合内存泄漏
- 主干集合和模型url,批量模型集合保存
- 如何从asp.net mvc将模型集合注入backbone.js
- JavaScript:Backbone.js获取json并将其加载到模型集合中
- 如何为我的所有BackboneJS模型/集合REST调用添加一个基本URL
- 我如何检测一个对象是一个水线模型或模型集合在Sails.js
- 在嵌套的骨干(木偶)模型/集合中冒泡事件
- 骨干关系——深度嵌套模型/集合
- 如何在主干视图中加载模型集合
- 类似骨干模型/集合的React库
- 从React组件更新模型/集合
- 主干监听嵌套模型/集合
- BackboneJS模型/集合urlRoot/URL的意义