【问题标题】:Proper way to pass a controller to a Component将控制器传递给组件的正确方法
【发布时间】:2014-04-04 05:35:26
【问题描述】:

好的,我正在尝试获取随机控制器(不是我的模板的默认控制器)上的计算属性,以将此属性传递给随机模板上的组件。在 irc 的一些帮助下,我被指出:“http://emberjs.com/guides/controllers/dependencies-between-controllers/”并意识到我的问题更多的是控制器依赖问题而不是组件问题,这有所帮助,但我仍然遇到问题。

所以在我的 blah 模板的默认控制器 (BlahController) 上,我使用 'needs' 挂钩来访问 FooBarController,如下所示:

needs: 'foo_bar'

在我调用组件的同一个模板中,我得到了 FooBarController 的属性,如下所示:

{{my-widget someProperty=controllers.foo_bar.someProperty}}

而我的组件只显示如下属性:

{{someProperty}}

我试图访问的属性 (someProperty) 是一个计算属性,它有自己的依赖项。我收到一个错误,即计算属性上的依赖属性似乎不可用???

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    Ember 组件仅在您需要完全隔离的视图来构建可重用的 ui 元素时使用。因此,当您将组件作为参数调用时,必须传入组件模板所需的所有内容。组件不应绑定到控制器。相反,当它需要传播事件时,它应该使用 'sendAction' api 来控制调用它的模板的任何控制器。你真正需要的是一个视图。

    【讨论】:

    • 嗨,Hrishi,我刚刚编辑了我原来的问题。我设法靠得更近了,但后来又撞到了另一堵墙上。但感谢您的帮助。我想我无法拥有一个从某个控制器吐出计算属性的组件,这对我来说似乎很奇怪?想要对组件做这件事似乎是一件合理的事情。我还认为在实践中组件更适合在视图中使用,因为它们使您的模板中的内容更加简洁......但我想我必须回到视图。
    • 这只是将字符串“controllers.whatever”返回到我的模板。没有引号肯定会访问控制器上的计算属性,因为我得到: Uncaught TypeError: Cannot read property 'height' of undefined 在这种情况下高度是我所追求的计算属性上的一个属性。我敢说这似乎是一个错误。
    • 对不起,我的错误,看到这个:emberjs.com/guides/components/passing-properties-to-a-component,看起来你应该像 {{my-widget someProperty=controller.controllers.foo_bar.someProperty}}
    • 是的,这就是“答案”,遗憾的是我不能投票+1,因为我还是新手。不过谢谢!我得到的那个错误是一个不同的问题,与将控制器属性传递给组件无关。
    猜你喜欢
    • 2023-03-29
    • 2013-07-20
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多