gpt4 book ai didi

javascript - Backbone.js 设置导致集合中的模型再次成为 "initialize"

转载 作者:可可西里 更新时间:2023-11-01 13:35:37 24 4
gpt4 key购买 nike

目前我调用服务器返回两个对象和一个我用来设置集合的对象。 (我每 10 秒轮询一次,很快就会为此使用 socket.io)。

我注意到每次我对对象使用集集合时都会调用我的模型初始化函数。我认为这套装置很聪明,只添加/更改属性或删除模型,而对于未更改的模型,则什么都不做。

// All Orders Collection
var AllOrders = Backbone.Collection.extend({
model: Order,
url: '/venues/orders'
});


var Order = Backbone.DeepModel.extend({
idAttribute: 'orderid',
url: '/venues/orders',


initialize : function(){
// this is called everytime i use set even if model is in collection
// do stuff
}
})


*****************
app.allOrders.set( app.getOrders.get('orders') );

最佳答案

如果你看主干源,

将模型合并到集合中时 _prepareModel方法在合并之前调用,它根据传入的属性创建一个新模型。

这是 set code ,

 if (!(model = this._prepareModel(attrs = models[i], options))) continue;

// If a duplicate is found, prevent it from being added and
// optionally merge it into the existing model.
if (existing = this.get(model)) {
if (remove) modelMap[existing.cid] = true;
if (merge) {
attrs = attrs === model ? model.attributes : options._attrs;
existing.set(attrs, options);
if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;
}

那么发生的事情是,

  • 根据您传入的属性创建了一个新模型
  • 在集合中查询与新模型具有相同 ID 的现有模型。
  • 如果合并选项为 true,它会将新属性推送到现有模型。

关于javascript - Backbone.js 设置导致集合中的模型再次成为 "initialize",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17322503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com