这不是那么具体但是关于我的Backbone架构理解的常见问题。
所以我需要直接从列表中编辑Product属性。 我为产品列表创建了产品和骨干收集的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。请解释一下如何解决这个问题!
答案 0 :(得分:0)
我一直想做的一件事就是避免这样的问题,即创建“列表视图”和“项目视图”,并在列表视图上呈现多个项目视图。这允许我有两个单独的事件哈希:一个在项目视图级别,一个在列表视图级别。这样做也很明显Backbone事件处理的位置(项目视图,如果我们专注于一个模型,列表视图,如果我们专注于集合)。
还要记住,Backbone集合将所有模型事件代理到它们自己的事件触发器,因此可以执行collection.on("change:someModelAttr")
。所有这些回调都会得到受影响的模型。
答案 1 :(得分:0)
最后描述的问题是我定义的模型中的cos url而不是urlRoot。