首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EmberJS,如何观察散列对象中的任何更改。

EmberJS,如何观察散列对象中的任何更改。
EN

Stack Overflow用户
提问于 2016-03-07 11:35:22
回答 1查看 2.3K关注 0票数 5

我有一个物体,像:

代码语言:javascript
运行
复制
// app/services/my-service.js
import Ember from 'ember';

export default Ember.Service.extend({
  counters: Ember.Object.create()
})

myService.counters是一个散列,类似于:

代码语言:javascript
运行
复制
{
  clocks: 3,
  diamons: 2
}

我想向这个对象添加一个计算的属性,这样返回myService.counters.clocksmyService.counters.diamons的和

代码语言:javascript
运行
复制
// app/services/my-service.js
...
count: Ember.computed('counters.@each', function(){
  return _.reduce(this.get('counters'), function(memo, num){ return memo + num; }, 0);
})
...

但是观察者的配置不被接受,我有一个错误:

代码语言:javascript
运行
复制
Uncaught Error: Assertion Failed: Depending on arrays using a dependent key ending with `@each` is no longer supported. Please refactor from `Ember.computed('counters.@each', function() {});` to `Ember.computed('counters.[]', function() {})`.

但如果我提议的改变是:

代码语言:javascript
运行
复制
// app/services/my-service.js
...
count: Ember.computed('counters.[]', function(){
  return _.reduce(this.get('counters'), function(memo, num){ return memo + num; }, 0);
})
...

计数属性未更新。

我唯一能做到的就是这样:

代码语言:javascript
运行
复制
// app/services/my-service.js
...
count: Ember.computed('counters.clocks', 'counters.diamons', function(){
  return _.reduce(this.get('counters'), function(memo, num){ return memo + num; }, 0);
})
...

在这种情况下,如何使用任何类型的通配符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 15:13:39

@each[]用于观察数组元素和数组。

您不能使用通配符,因为它将是一个严重的性能接收器。有一个多属性的缩写:

代码语言:javascript
运行
复制
count: Ember.computed('counters.{clocks,diamons}', function() {
    return this.get('counters').reduce((memo, num) => memo + num, 0);
})

我还更新了计算逻辑以使用Array#reduce,并使用带有隐式返回的箭头函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35842668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档