如何创建向属性加 1 的 Ember 计算属性
How to create an Ember computed property that adds 1 to a property?
我只是在学习Ember,我对计算属性有点困惑。指南中的所有内容都使用字符串,例如从名字和姓氏等创建全名的计算属性。无论如何,我对如何使用整数感到困惑,因为语法似乎几乎需要使用字符串。
例如,我的控制器上有一个名为 count
的属性。
import Ember from 'ember';
export default Ember.Controller.extend({
count: 0,
counter: Ember.computed('count', function() {
var num = `${this.get('count')}`;
var newNum = parseInt(num) + 1;
this.set('count', newNum);
return this.get('count');
})
});
我知道这段代码真的很糟糕,我只是想说明我试图做什么和失败了。为什么Ember.computed
将字符串作为其第一个参数?
为什么当我处理整数而不是字符串时,我必须在 this.get
和 this.set
中使用字符串?我必须手动解析 int,否则它会返回一个字符串,为什么它会将我的 count 属性转换为字符串?
无论如何,当我运行时在余烬检查器中
$E.get('count')
确实成功添加了 1,但无法继续添加 1,这让我认为它没有更新实际的 count
属性。
非常感谢。我很感激你的帮助。
你的代码设置了一个Ember Twiddle。我将尝试解决您的每个问题:
您可以将Ember.Object
视为{}
的包装器。所有Ember.Object
键都是字符串,因为{}
键在 Javascript 中都是字符串。
对于存储在Ember.Object
上的每个属性,该属性是一个以某个字符串作为键的值。要查找该值,您必须提供该值的"路径"或"位置",如键所示(就像哈希表一样)。这就是为什么您需要在 get
和 set
中指定字符串的原因。
值可以是Javascript中的任何类型,而不仅仅是字符串。看看我发布的Ember Twiddle,然后打开你的控制台。在您的代码中,num
是一个字符串,因为您已将其包装在 ES6 模板字符串中,该字符串正在转换 this.get('count')
的值。
Ember.computed
旨在将数据呈现为模板。重要的是要了解:
- 很懒
- 它缓存计算结果。
- 仅当计算属性所依赖的一个或多个属性发生更改时,才会重新计算。
当你调用Ember.computed
时,你首先传入任意数量的字符串。每个字符串都是您的 CP "依赖"的值(在Ember.Object
上)的路径。
由于 CP 是惰性的,因此只有在代码或模板中访问 CP 时,才会计算'counter'
。如果'count'
更改,'counter'
的缓存值将被遗忘。下次访问'counter'
时,它将重新计算。
在这种情况下,'counter'
CP 函数只运行一次,因为'count'
永远不会改变。这就是为什么你只观察到一个添加。
- 手动触发ember.js中的属性更改
- Ember服务在注入组件并在计算属性中使用后是未定义的
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- Ember JS属性访问器
- Ember访问公共路由/控制器mxiin中的控制器属性
- Ember.js:未在组件'中渲染的模型的计算属性;关于变更的参考
- 升级到Ember 1.0计算属性在视图中不再有效
- 在Ember中,can服务具有计算属性
- IE8中的Ember.js(1.0pre)属性绑定错误
- Ember.js错误“;无法读取属性'容器'未定义的“;使用液体火时
- Ember.js/HHandlebars:使用{{view}}助手渲染的视图不绑定属性
- Ember JS如何获取具有唯一属性值的数组
- Ember 1.0 预发行版支持属性是否已更改
- Ember.js数组控制器计算属性的复选框
- 在ember.js中访问模型之外的计算属性
- Ember使用参数计算属性
- ember.js计算属性中this的值是如何定义的
- 使用TranstionToRoute中的url将属性传递到Ember中的新路由
- 从另一个具有属于关系的模型访问模型属性 Ember.js
- 序列化强调的属性ember-data