Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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 - Fatal编程技术网

Javascript 使用新型号重置主干收集不会';你不能超越以前的型号吗?

Javascript 使用新型号重置主干收集不会';你不能超越以前的型号吗?,javascript,backbone.js,Javascript,Backbone.js,我想在每次收到新数据时对主干收集进行批量重置,我希望每次重置时,所有当前模型都会清空,新数据会重置在顶部,但我发现新数据只是作为新模型与以前的模型一起添加。有人能告诉我需要做什么来实现这一点吗 JS const OrderModel = Backbone.Model.extend({ parse(response) { response.name = `+${response.name}`; console.log(response.name);

我想在每次收到新数据时对主干收集进行批量重置,我希望每次重置时,所有当前模型都会清空,新数据会重置在顶部,但我发现新数据只是作为新模型与以前的模型一起添加。有人能告诉我需要做什么来实现这一点吗

JS

const OrderModel = Backbone.Model.extend({
    parse(response) {
        response.name = `+${response.name}`;
        console.log(response.name);
        return response;
    }
});

const OrdersCollection = Backbone.Collection.extend({

    model: OrderModel,

    initialize() {
        setTimeout(() => {
            this.trigger('snapshot', data);
        }, 1000);

        setTimeout(() => {
            this.trigger('snapshot', data);
        }, 2000);

        this.listenTo(this, 'snapshot', this.setCollection, this);
    },

    setCollection(response) {
        this.reset(response, {parse: true});
    }
});
jsFiddle:

小提琴:

出现了两个问题

第一个问题是,在重置集合时,没有重置html。在再次添加之前,需要清除前3个列表项

像这样:

renderRows() {
    this.$el.empty()
    this.collection.each(this.renderRow, this);
},
第二个问题是这段代码

const OrderModel = Backbone.Model.extend({
    parse(response) {
        response.name = `+${response.name}`;
        return response;
    }
});
参数
response
引用
data
数组中的对象。当您更改
响应
名称
属性时,您也在更改
数据
中的引用对象。第二次调用解析时,您会看到一个额外的“+”,因为您在第一次解析中对数据进行了变异

我克隆了对象以防止意外覆盖

const OrderModel = Backbone.Model.extend({
    parse(response) {
      var model = _.clone(response);
      model.name = `+${response.name}`;
        return model;
    }
});
小提琴:

出现了两个问题

第一个问题是,在重置集合时,没有重置html。在再次添加之前,需要清除前3个列表项

像这样:

renderRows() {
    this.$el.empty()
    this.collection.each(this.renderRow, this);
},
第二个问题是这段代码

const OrderModel = Backbone.Model.extend({
    parse(response) {
        response.name = `+${response.name}`;
        return response;
    }
});
参数
response
引用
data
数组中的对象。当您更改
响应
名称
属性时,您也在更改
数据
中的引用对象。第二次调用解析时,您会看到一个额外的“+”,因为您在第一次解析中对数据进行了变异

我克隆了对象以防止意外覆盖

const OrderModel = Backbone.Model.extend({
    parse(response) {
      var model = _.clone(response);
      model.name = `+${response.name}`;
        return model;
    }
});

我不确定我是否理解你的问题。每次重置收藏时,长度始终为3。如果每次重置收藏时检查小提琴,则会添加另外3个型号。我遇到的问题是第一组模型数据被设置,在每个模型上运行parse以向name添加一个+,下一组数据被设置,模型再次运行parse,但这次添加了2++等等。我不确定我是否理解您的问题。每次重置收藏时,长度始终为3。如果每次重置收藏时检查小提琴,则会添加另外3个型号。我遇到的问题是,第一组模型数据被设置,在每个模型上运行parse以向name添加一个+,下一组数据被设置,模型再次运行parse,但这次添加了2++等等。答案很好,我总是在parse中直接更新数据变量,但现在这种类型的实现只会遇到这个问题。将尝试在我的主要项目,看看这个问题是否得到解决!谢天谢地,我总是直接更新parse中的数据变量,但现在这种类型的实现只会遇到这个问题。将尝试在我的主要项目,看看这个问题是否得到解决!谢谢