Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干:如何从模型集合中保存模型的属性更改?_Javascript_Backbone.js_Underscore.js - Fatal编程技术网

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对象,并且您将在集合添加事件中添加新的项目视图。处理集合大小更改稍微复杂一些,但处理模型事件要容易得多。