如何让组件从控制器继承多个属性



New to Ember.js.

我正在尝试创建健壮的组件,这些组件将委托给控制器以获取各种属性。我知道我可以像这样绑定单个属性,但这似乎很冗长。

{{#my-component attr1=attr1 attr2=attr2}}
  Hello
{{/my-component}}

似乎想要将所有内容委托给控制器可能是一种常见情况。是否有建议的模式?

您的示例代码将被视为正确的方式。

从技术上讲,您可以传入单个对象(可能由控制器组成),但我建议不要这样做。组件应该不太了解数据的来源,因为 attr1 可以是模型属性,而 attr2 可能是执行某种计算的视图的属性。通过传入单个对象,可以限制组件的灵活性。

除了灵活性之外,我更喜欢长参数列表,因为很明显你的组件接受什么;即使它更冗长一些。如果您的组件正在接受大量的参数列表,这可能表明该组件试图做太多事情,您可能希望将其分解为更小的组件。

App.MyComponentComponent = Ember.Component.extend({
    attr1: function() {
        return this.get('targetObject.attr1');
    }.property('targetObject.attr1'),
    attr2: function() {
        return this.get('targetObject.attr2');
    }.property('targetObject.attr2')
});

来自 Ember 文档:"如果组件当前已插入到父视图的 DOM 中,则此属性将指向父视图的控制器。"

请谨慎使用。

最新更新