Ember.js、set()和computed属性

w8f9ii69  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(199)

我正在阅读set()方法的Ember.js API reference,但我不理解其中的一段。
计算属性
如果你试图在一个定义了计算属性处理程序的键上设置一个值(参见get()方法的例子),那么set()将调用该方法,传递值和键,而不是简单地改变值本身。当您需要实现由一个或多个成员属性组成的属性时,这很有用。
我理解set()是如何独立工作的,但是设置计算属性(函数)仍然没有点击,即使在阅读了这一段之后。
有没有人可以给予额外的解释或例子?

bxpogfeg

bxpogfeg1#

您可以阅读https://guides.emberjs.com/v2.14.0/object-model/computed-properties/#toc_setting-computed-properties以获得更好的理解。
在这里,我只是试图解释同样的事情。

  1. import Ember from 'ember';
  2. export default Ember.Component.extend({
  3. firstName: '',
  4. lastName: '',
  5. fullNameCP: Ember.computed('firstName', 'lastName', function() {
  6. return `${this.get('firstName')} ${this.get('lastName')}`
  7. }),
  8. fullNameCPwithGetSet: Ember.computed('firstName', 'lastName', {
  9. get(key) {
  10. return `${this.get('firstName')} ${this.get('lastName')}`;
  11. },
  12. set(key, value) {
  13. let [firstName, lastName] = value.split(/\s+/);
  14. this.set('firstName', firstName);
  15. this.set('lastName', lastName);
  16. return value;
  17. }
  18. })
  19. });

在上面,
如果我们说,this.set('fullNameCP','Yehuda Katz')之后,它将被视为正常属性,它将不会被视为计算属性。您不应该手动将fullNameCP设置为新值。如果你想这样做,那么你需要用Getter和Setter定义Computed属性,比如fullNameCPwithGetSet
如果我们说,this.set('fullNameCPwithGetSet','Yehuda Katz'),那么它将通过传递值也就是Yehuda Katz来调用计算属性fullNameCPwithGetSetset方法,以便我们可以为依赖键设置确切的值。

展开查看全部
8qgya5xd

8qgya5xd2#

在某些情况下,a.set(b, c)不会触发计算值。所以我们可以使用set(a, b, c)
a = yourObject,b =要修改的属性,c =值

相关问题