我们正在尝试整合一个门户网站,其中布局可以在主布局中以任何顺序包含任意数量的核心小部件。
为了模拟这一点,我们有很多出路:
<h1>{{title}}</h1>
{{outlet pos1}}
{{outlet pos2}}
{{outlet pos3}}
{{outlet pos4}}
{{outlet pos5}}
{{outlet pos6}}
{{outlet pos7}}
{{outlet pos8}}
{{outlet pos9}}
{{outlet pos10}}
在路由器中,我们试图逐个加载它们:
connectOutlets: function(router, group) {
router.get('applicationController').connectOutlet('group', group);
router.get('groupController').connectOutlet('pos9', 'toDo', App.ToDo.find(41));
router.get('groupController').connectOutlet('pos3', 'toDo', App.ToDo.find(15));
但是,如果有多个,则使用最终上下文。所以在这个例子中,我们得到了两个toDo对象的实例,这两个实例都是id#15。
我是否以正确的方式接近这个并且是否可以以编程方式执行此操作,而不是使用固定的插座布局?
谢谢, 丹
答案 0 :(得分:1)
编辑:我的回答是基于这样的假设:在您的情况下确实需要这种复杂的解决方案。根据您的简单示例,您还可以说,您可以将ArrayController用于所有ToDo项目。但这是我尝试解决复杂问题的答案:
问题有以下两行:
router.get('groupController').connectOutlet('pos9', 'toDo', App.ToDo.find(41));
router.get('groupController').connectOutlet('pos3', 'toDo', App.ToDo.find(15));
你基本上做的是:
所以我的解决方案是为每个插座实例化一个新的Controller。不幸的是,这还需要修改View的查找。您可能知道,Controller和View匹配名称。所以粗略的算法将是伪代码:
正如您可能猜到的那样,我自己遇到了这个问题。之前我确实问过这个问题,这就是解决方案,我提出来了。我想,这是我遗嘱中缺少的一个功能。我称之为动态插座名称。请在此处查看我原来的问题:How to implement a list of multiple elements, where an element can be expanded by click? (Dynamic Outlet Names?)
看看更新部分和那里提供的小提琴,你会认出我在这里提供的伪代码。
如果有人可以查看我的解决方案,那将会很棒,因为此刻它仍然是hacky,但对我来说似乎很有价值。希望这会得到一些关注: - )