【发布时间】:2014-04-08 20:59:44
【问题描述】:
Durandal 2.0 - 查看合成顺序
我有视图,它有许多子视图,我使用它们只是为了将 HTML 分解为单独的文件。
index.html(index.js)
- menu.html
- header.html
- footer.html
菜单视图在加载后由索引视图填充。
在 index.html 中,我像这样编写菜单视图(没有模块 menu.js,这里只有 html 组合):
<!--ko compose: { view: 'menu'}--><!--/ko-->
问题在于视图组合的顺序。
我在 index.js 中连接了一个附加事件,然后调用一个函数来填充 menu.html 中的菜单 div。
但是,附加的视图事件被调用之前 menu.html 视图已被合成。
从控制台看事件如下所示:
Binding views/footer
Binding views/index
binding complete: <section data-view="views/index" style="display: none;">…</section>
[Index] Main View Attached
Binding views/header
Binding views/menu
Binding views/menudropdown
因此,主视图附加在子视图之前。
有没有办法改变组合顺序,或者在主视图附加/完成之前等待所有子视图组合/加载?
谢谢
【问题讨论】:
-
您是否遇到了想要解决的问题?构图的顺序真的会造成问题吗?您的父视图应该首先加载,然后是子视图,这似乎是合乎逻辑的。
-
您似乎可以推迟触发激活完成以使附加的事件等待触发,但它只会更改事件触发的时间,而不是顺序。
-
Eric - 是的,我需要在子视图中加载 DOM,以便初始化菜单(剑道树视图)。
-
我发现的一种方法是创建一个绑定处理程序,在绑定处理程序中,您可以在 init 参数中获取 viewModel,然后简单地调用一个函数来初始化菜单。我知道这不是最好的设置。我可能会尝试重构它,只是想让它现在工作。
-
@jiggle 好吧。您能否发布您的每个视图文件和视图模型文件,相关位?发布当前工作的小提琴(即使不正确)会有所帮助。
标签: durandal