【发布时间】:2015-02-17 14:01:03
【问题描述】:
是否可以通过模板将父组件的属性绑定到子组件的计算属性?
目标是通过绑定访问子组件的计算属性。
// We are in some parent component's template
{{child-component aComputedProp=aNonComputedProp}}
// Parent component
export default Ember.Component.extend({
aNonComputedProp: null
});
// Child component
export default Ember.Component.extend({
aComputedProp: function () {
return 4 + 4;
}.property()
});
更新
@KalmanKalman Hazins
虽然这种方法在对该子组件执行操作时效果很好,但当祖先组件需要访问该子组件的数据时,它就不起作用了。
这是描述困境的图片。
我能想到的让组件相互通信而没有硬依赖的唯一方法是通过服务(或充当服务的父组件)和一系列伪装成 API 的触发器/处理程序事件.
更新
我正在考虑的另一种方法是通过以下方式从 ChildComponent1 装饰父控制器:
decorateTargetObject: function () {
Ember.defineProperty(this.get('targetObject'), 'height', Ember.computed(function () {
return this.$().outerHeight();
}.bind(this)));
}.on('init')
并且 ChildComponent2 可以通过 this.get('targetObject.height') 访问该属性
由于组件需要插入其控制器,因此这会破坏单向封装。
有没有办法将现有属性设置为计算属性而不重新定义它(没有Ember.defineProperty)?
//In ChildComponent1
decorateTargetObject: function () {
this.set('targetObject.height', ...a computed function...)
}.on('init')
【问题讨论】:
标签: ember.js