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

时间:2014-02-12 19:52:40

标签: ember.js

Ember.js的新手。

我正在尝试创建强大的组件,这些组件将委托给控制器以获取各种属性。我知道我可以绑定这样的个别属性,但看起来很冗长。

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

似乎想要将所有内容委托给控制器可能是一种常见情况。这样做有推荐的模式吗?

2 个答案:

答案 0 :(得分:0)

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

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

除了灵活性之外,我倾向于选择长参数列表,因为很明显你的组件接受了什么;即使它有点冗长。如果你的组件采用了大量的参数列表,那么这可能是组件试图做太多的一个迹象,你可能想把它分解成更小的组件。

答案 1 :(得分:0)

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 docs: "如果组件当前插入父视图的DOM中,则此属性将指向父视图的控制器。"

谨慎使用。