Ember.js、set() 和计算属性
Posted
技术标签:
【中文标题】Ember.js、set() 和计算属性【英文标题】:Ember.js, set(), and computed properties 【发布时间】:2017-12-18 14:46:08 【问题描述】:我正在阅读set()
方法的Ember.js API reference,但我不理解某个特定段落。
计算属性
如果您尝试在具有计算属性的键上设置值 处理程序定义(参见 get() 方法的示例),然后 set() 将 调用该方法,同时传递值和键,而不是简单地传递 改变价值本身。这对那些你有用的时候 需要实现一个由一个或多个成员组成的属性 属性。
我了解set()
是如何独立工作的,但是即使在阅读了本段之后,设置计算属性(函数)仍然无法点击。
谁能提供更多解释或示例?
【问题讨论】:
【参考方案1】:您可以阅读https://guides.emberjs.com/v2.14.0/object-model/computed-properties/#toc_setting-computed-properties 以获得更好的理解。
在这里,我只是想解释同样的事情。
import Ember from 'ember';
export default Ember.Component.extend(
firstName: '',
lastName: '',
fullNameCP: Ember.computed('firstName', 'lastName', function()
return `$this.get('firstName') $this.get('lastName')`
),
fullNameCPwithGetSet: Ember.computed('firstName', 'lastName',
get(key)
return `$this.get('firstName') $this.get('lastName')`;
,
set(key, value)
let [firstName, lastName] = value.split(/\s+/);
this.set('firstName', firstName);
this.set('lastName', lastName);
return value;
)
);
在上面,
如果我们说,this.set('fullNameCP','Yehuda Katz')
之后它将被视为普通属性,它不会被视为计算属性。您不应手动将 fullNameCP
设置为新值。如果您想这样做,那么您需要使用 Getter 和 Setter 定义 Computed 属性,例如 fullNameCPwithGetSet
。
如果我们说this.set('fullNameCPwithGetSet','Yehuda Katz')
,那么它也会通过传递值来调用计算属性fullNameCPwithGetSet
的set
方法,即Yehuda Katz
,这样我们就可以为依赖键设置准确的值。
【讨论】:
当您说“之后它将被视为普通财产”时,您究竟是什么意思?有什么例子可以检查行为吗?什么时候会发生这种情况? 另外,使用 Ember.set(a, b,c) 有同样的效果吗? 这意味着,当您为没有getter的计算属性设置值时,这意味着如果有任何依赖属性更改,它将不会重新计算。Also, does using Ember.set(a, b,c) have the same effect
- 是的,Ember.set
和 this.set
相同。以上是关于Ember.js、set() 和计算属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ember.js 中创建计算属性以查看单个 Ember Data 属性是不是脏?
coffeescript 1.7 破坏了我的 ember.js 计算属性