从Ember版本2.3.0开始,组件"属性和#34;之间是否存在差异?与组件"属性?"

时间:2016-01-21 18:42:46

标签: ember.js

在迄今为止的所有余烬文档中,它们都是指组件的属性。"例如,对this.get('some_property')this.set('some_property', 'some_value')的调用称为获取/设置组件的属性

从版本2.2.0,2.3.0中的最新文档开始,特别是在有关组件生命周期钩子的文档中,它们现在使用术语attributes。这似乎没有在API中记录,似乎是与properties重叠的概念。

这两者之间是否存在有效差异?

2 个答案:

答案 0 :(得分:3)

目前,区别仅仅在于术语,但它是以一种为用户准备微光(尖括号)组件的方式引入的。

属性是组件的内部属性,属性是通过绑定传递给组件的属性。假设您有以下内容:

// application.hbs
{{my-component foo="foo"}}

// my-component.js
export default Ember.Component.extend({
  bar: "bar"
});

在此示例中,foo是一个属性(通过绑定传递到组件中),bar是一个属性(在内部定义)。但是,在经典组件中,属性查找是代理的,这意味着当您在组件中执行this.get('foo')时,您将获得属性的值"foo"

在尚未提供的微光器组件中,这是未来发言,您需要在attrs哈希中查找属性,因此您必须执行{this.get('attrs.foo')之类的操作1}}获取值"foo"

我希望我不要再混淆你了!

答案 1 :(得分:0)

属性为角支架组件和只读装订的未来做好准备,但它们也可以改善您今天的生活!使用属性,您的操作可以具有返回值:

// application.hbs
{{my-component save=(action "someActionWhichReturns")}}

// my-component.js
export default Ember.Component.extend({
  actions: {
    save(user) {
      // sendAction eats the return value
      this.sendAction('save', user);

      // I can get the return value this way
      var result = this.attrs.save(user);
    }
  }
});

您可以在博客上阅读有关2.x过渡的更多信息: http://emberjs.com/blog/2015/05/10/run-up-to-two-oh.html