Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 Backbone.js多表数据操作_Javascript_Backbone.js_Backbone Events_Dom Manipulation_Backbone.js Collections - Fatal编程技术网

Javascript Backbone.js多表数据操作

Javascript Backbone.js多表数据操作,javascript,backbone.js,backbone-events,dom-manipulation,backbone.js-collections,Javascript,Backbone.js,Backbone Events,Dom Manipulation,Backbone.js Collections,在我的页面中有3个单独的表,它们都在视图初始化和从我的后端RESTAPI获取数据时被填充。获取数据后,我将reset绑定到名为paint的方法,并在该循环中遍历集合并构造表 paintSelected: function (collection, options) { collection.each(function (ch) { var view = new ChannelViewDetailed({model: ch}); view.setOwner(

在我的页面中有3个单独的表,它们都在视图初始化和从我的后端RESTAPI获取数据时被填充。获取数据后,我将reset绑定到名为
paint
的方法,并在该循环中遍历集合并构造表

paintSelected: function (collection, options) {
    collection.each(function (ch) {
        var view = new ChannelViewDetailed({model: ch});
        view.setOwner(collection);
        this.$el.find('#selected tr:eq(' + collection.indexOf(ch) + ')').after(view.render().el);
    }, this);
},
这将在我定义的下划线模板上构造整个表。现在一切都很好,我可以处理在这个页面上的多个集合之间删除和添加数据

当我想在此表上执行
exclude all
include all
操作时,事情会变得一团糟,视图所有者会因为我必须进行的循环而丢失,列表中会出现重复项,并且顺序也会丢失

ChannelViewDetailed = Backbone.View.extend({
    tagName: 'tr',
    template: _.template($('#tpl-channel-row-detailed').html()),

    events: {
        'click td.del': 'deleteSelected'
    },

    setOwner: function (collection) {
        this.owner = collection;
    },

    render: function () {
        this.$el.html(this.template(this.model.toJSON()));
        return this;
    },

    deleteSelected: function (e) {
        e.preventDefault();
        this.owner.remove(this.model);
        this.remove();
    }
});
请注意,当执行每项操作时,上面提到的所有操作都可以正常工作,但当我不想执行批处理(包括所有/排除所有)操作时,这些操作就不能正常工作

这是我试图实现的排除所有方法的一个示例

excludeAllChannels: function (e) {
        e.preventDefault();
        var self = this;

        if (!$.isEmptyObject(self.selected)) {
            _.each(this.selected.models, function (item, index, items) {
                self.selected.remove(item);
            });
            $('#in-channels tr').has('td').remove();
            unsavedState = true;
        }
    }

修改当前正在循环的数组可能会导致意外结果

可替换为以下任一项:

_.each(_.clone(a.models), function(item) { a.remove(item); });
a.remove(a.models);
a.reset();

我不知道你是怎么做到的,但伙计,它就像一个符咒!因为在某些情况下,重写重置绑定是首选方法。
_.each(_.clone(a.models), function(item) { a.remove(item); });
a.remove(a.models);
a.reset();