虽然connectOutlet("basename")
会自动创建一个 BasenameController 的实例,但我想知道是否有办法使用{{view}}
帮助程序执行相同操作。
我已经尝试了一些我在示例中看到过的东西,但是它们似乎没有用:
<击> {{view controllerBinding=App.BasenameController}}
击>
<击> {{view controllerBinding=App.basenameController}}
击>
<击> {{view controllerBinding="App.BasenameController"}}
击>
<击> {{view controllerBinding="App.basenameController"}}
击>
我还尝试使用controller
而不是controllerBinding
来做同样的事情,遗憾的是没有成功,我也无法找出两者之间的差异究竟在哪里。
有人知道如何实现我的目标吗?
答案 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"}}
。每个控制器都有一个指向路由器的目标属性。但是,我不建议使用此代码。它很脆弱,难以测试,难以调试,并且将来会回来咬你。