我想访问一个属性,比如来自父控制器的组件中定义的selectedItem
。怎么做到这一点?我想访问这个项目,以便我可以打开一个定义为部分的模态。如果有人可以建议任何更好的解决方案,也欢迎。
答案 0 :(得分:3)
您可以将属性绑定到控制器的属性。像这样:
App.FooBarComponent = Ember.Component.extend({
selectedItem: null,
// set the property somewhere in your component
});
在您的控制器中
App.SomeController = Ember.Controller.extend({
fooBarSelectedItem: /* empty (null) or a value */
});
在您的模板中
{{foo-bar selectedItem=controller.fooBarSelectedItem}}
答案 1 :(得分:0)
我有一个“倒计时”组件,它会渲染一个时钟,当倒计时结束时,我需要禁用组件周围视图上的一些按钮。该解决方案与@ splattne的答案类似,但它是更新的Ember 3.1语法,共享值不是模型的一部分。
组件:
export default Component.extend({
'remaining_time': computed('timer_end', 'dummy', function() {
let now = new Date();
let remaining = this.get('timer_end') - now;
if (remaining < 0) {
scheduleOnce('afterRender', this, function(){
this.set('event_listener.expired', true);
});
this.set('should_run', false);
return "Countdown Closed";
}
...
}),
});
模板:
{{count-down timer_end=model.timer_end event_listener=countdown_status}}
控制器:
export default Controller.extend({
countdown_status: Object.create({'expired': false}),
controls_enabled: computed('countdown_status.expired', function() {
return !this.get('countdown_status.expired');
}),
...
});
注意scheduleOnce('afterRender'
:https://github.com/emberjs/ember.js/issues/13948需要这样做。如果您的组件在渲染整个视图之前更改了共享值,那么您将只需要它,不幸的是,这是我的。