Javascript 主干:如何从模型集合中保存模型的属性更改?
关于我对主干架构的理解,这不是一个很具体但很常见的问题 所以我需要从列表中编辑产品属性。 我为产品创建了主干模型,并为产品列表创建了主干集合 在列表中,您可以选择任何模型,系统应向下滑动此模型的编辑界面 因此,我启动了视图,希望在其中呈现列表并显示/编辑集合中的特定模型:Javascript 主干:如何从模型集合中保存模型的属性更改?,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,关于我对主干架构的理解,这不是一个很具体但很常见的问题 所以我需要从列表中编辑产品属性。 我为产品创建了主干模型,并为产品列表创建了主干集合 在列表中,您可以选择任何模型,系统应向下滑动此模型的编辑界面 因此,我启动了视图,希望在其中呈现列表并显示/编辑集合中的特定模型: App.Views.ProductList = Backbone.View.extend({ el: '#content', initialize: function() { this.render(); }, eve
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.onchange:someModelAttr。所有这些回调都会得到受影响的模型,同样。最后描述的问题是模型中的原因,我定义的url不是urlRoot。创建列表和项目视图-您的意思是在列表视图中正确初始化项目视图?是的-您将有两个单独的主干.view.extend对象,并且您将在集合添加事件中添加新的项目视图。处理集合大小更改稍微复杂一些,但处理模型事件要容易得多。