0

connectOutlet("basename")自动创建BasenameController的实例时,我想知道是否有办法使用{{view}}-helper 来做同样的事情。

我已经尝试了一些我在示例中看到的东西,但它们似乎都不起作用:

{{view controllerBinding=App.BasenameController}}

{{view controllerBinding=App.basenameController}}

{{view controllerBinding="App.BasenameController"}}

{{view controllerBinding="App.basenameController"}}

我也尝试过使用controller而不是做同样的事情controllerBinding,不幸的是没有成功,而且我也无法找出它们两者之间的确切区别。

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

4

1 回答 1

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"}}:每个控制器都有一个指向路由器的目标属性。但是,我不建议使用此代码。它很脆,很难测试,很难调试,以后还会回来咬你。

于 2012-11-05T03:50:58.550 回答