骨干移除和新视图不会重置其属性数组内容
Backbone remove and new view does not reset its attribute array content
我有一个关于Backbone的两个属性的视图:
var MyBasketView = Backbone.View.extend({
_totalCost: 0,
_devices: [],
初始化时,我在localStorage中遍历一个数组,其中包含几个设备我将它们推入_devices数组并将它们的总和求和为_totalCost,就像这样
var self = this;
_.each(this._cartItems, function(cartItem) {
self._totalCost += cartItem.item.cost;
self._devices.push(cartItem.item);
}
在我的路由器中,当我离开这个页面时,我删除这个视图,当我回来时,我再次创建这个视图。问题是,当我在我的初始化函数中打印属性时,总成本是0,设备数组仍然有以前的设备。
它不应该被重置,当我删除视图或创建它与新的MyBasketView()?
我当然可以在我的初始化中清除它,但我想了解为什么会发生这种情况,如果它也发生在其他对象上?
解释与Model.defaults
(小字)基本相同:
记住,在JavaScript中,对象是通过引用传递的,所以如果您将一个对象作为默认值包含,它将被所有人共享实例。
当您创建视图的新实例时,值被复制,包括指向相同数组引用的_devices
:
var v1 = new MyBasketView();
var v2 = new MyBasketView();
v1._devices === v2._devices // true
http://jsfiddle.net/nikoshr/67pr1gnk/和该数组的内容将在您的MyBasketView
原型的整个生命周期中保留(即使实例被销毁)。
initialize
函数中分配变量:
var MyBasketView = Backbone.View.extend({
_totalCost: 0,
initialize: function() {
this._devices = [];
}
});
http://jsfiddle.net/nikoshr/67pr1gnk/1/这似乎就是Backbone的工作原理。您传递的对象不是深度克隆的。在initialize
中设置非const变量可能是一个更好的做法。
请看:http://jsfiddle.net/jrbxnr0t/
相关文章:
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- 如何使用lodash返回与模式匹配的属性数组
- 从嵌套属性数组中获取对象嵌套值
- 如何使用 javascript 返回数据属性数组
- JQuery 获取返回的属性数组
- 对公共属性数组进行排序
- Angularjs-ng repeat不反映属性数组中的更改
- JADE&NodeJS访问JSON对象属性数组
- Lodash 按数组的属性数组过滤
- 将对象数组转换为属性数组
- 如何从一个共享属性的jQuery集合中获取一个属性数组
- 骨干移除和新视图不会重置其属性数组内容
- 使用JSON从对象数组创建属性数组
- 将数据属性数组转换为对象
- 从属性数组和匹配属性值数组创建JavaScript对象的有效方法
- 访问json中的属性数组
- jquery.获得没有重复的自定义属性数组
- 如何更新对象属性数组值
- 多属性数组语法
- jQuery:生成"name”;动态属性数组