Javascript ES6设置设置,但;“尺寸”;不变
我正在使用ES6新的集合类型/对象,我遇到了一个非常奇怪的问题,当我向集合中添加一个项目时,它会显示为Javascript ES6设置设置,但;“尺寸”;不变,javascript,ember.js,ecmascript-6,babeljs,Javascript,Ember.js,Ecmascript 6,Babeljs,我正在使用ES6新的集合类型/对象,我遇到了一个非常奇怪的问题,当我向集合中添加一个项目时,它会显示为的一部分,但大小不会从零开始移动: 为了提供更多的上下文,以下是最初设置代码的代码: selectedValues: on('init',computed('group.selected', { set: function(param,value) { return typeOf(value) === 'array' ? new Set(value) : new Set([valu
的一部分,但大小不会从零开始移动:
为了提供更多的上下文,以下是最初设置代码的代码:
selectedValues: on('init',computed('group.selected', {
set: function(param,value) {
return typeOf(value) === 'array' ? new Set(value) : new Set([value]);
},
get: function() {
return new Set();
}
}))
注意:对于那些不熟悉语法的人来说,这是一个余烬计算属性
下面是添加/删除集合元素的代码:
if(selectedValues.has(elementId)) {
selectedValues.delete(elementId);
} else {
selectedValues.add(elementId);
}
在执行过程中的任何时候,我都可以从控制台看到该项正在从集合中添加和删除,但是size属性没有受到影响。同时,如果我从浏览器的控制台运行相同的命令集,它确实可以工作
对于那些熟悉的人,我正在通过
ember-cli-Babel
插件使用Babel。我在使用和不使用includePolyfill选项(又名,包括——或不包括——Babel的浏览器polyfill)的情况下都尝试过这个问题。您的getter总是返回一个新集合()
——该集合的长度为0。实际上,根据ES6规范,您的setter也是无效的,它应该只有一个参数,你的有两个getter被缓存,所以它只在第一次返回空集。这是余烬计算属性中的标准方法我的setter以什么方式有两个参数?它只有一个:elementId
,对吗?对余烬不太熟悉,但您是否正在尝试观察计算属性的大小
的某个地方?Ember已经重写了size
getter和setter函数,因此大小可能始终是开始时的大小。getter总是返回一个new Set()
-长度为0。实际上,根据ES6规范,setter也是无效的,它应该只有一个参数,你的有两个getter被缓存,所以它只在第一次返回空集。这是余烬计算属性中的标准方法我的setter以什么方式有两个参数?它只有一个:elementId
,对吗?对余烬不太熟悉,但您是否正在尝试观察计算属性的大小
的某个地方?Ember已经覆盖了size
getter和setter函数,因此大小可能永远都是开始时的大小。