使用{{view}}帮助器实例化控制器类?

时间:2012-11-04 19:03:19

标签: ember.js

虽然connectOutlet("basename")会自动创建一个 BasenameController 的实例,但我想知道是否有办法使用{{view}}帮助程序执行相同操作。

我已经尝试了一些我在示例中看到过的东西,但是它们似乎没有用:

<击> {{view controllerBinding=App.BasenameController}}

<击> {{view controllerBinding=App.basenameController}}

<击> {{view controllerBinding="App.BasenameController"}}

<击> {{view controllerBinding="App.basenameController"}}

我还尝试使用controller而不是controllerBinding来做同样的事情,遗憾的是没有成功,我也无法找出两者之间的差异究竟在哪里。

有人知道如何实现我的目标吗?

1 个答案:

答案 0 :(得分:1)

您可能想要使用插座。 connectOutlet / outlet函数用于重新映射其他控制器/视图对。

假设我们有一个人视图,但在该视图中我们希望有另一个控制器/视图对。为此,我们需要使用命名插座,我们的模板看起来像这样。

Person View!
{{name}} = the person's name!
{{controller}} = PersonController!
{{outlet other}} = our outlet

然后在路由器内部想要将另一个控制器/视图连接到该插座时,您可以在personController上使用connectOutlet。

router.get('personController').connectOutlet('other', 'other');

这会将OtherController和OtherView连接在一起并在模板中显示它们。第一个参数是插座名称,第二个是控制器/视图。

这使您可以轻松地将不同的控制器和视图交换到该插座。例如,使用不同的connectOutlet api,我们可以

router.get('personController').connectOutlet({
 outletName: 'other',
 controller: router.get('carsController'),
 viewClass: App.CarsView
});

...

顺便说一句,回答你原来的问题。通过执行以下操作,您可以从视图中访问其他控制器:{{view controllerBinding="controller.target.otherController"}}。每个控制器都有一个指向路由器的目标属性。但是,我不建议使用此代码。它很脆弱,难以测试,难以调试,并且将来会回来咬你。