我正在编写一组视图和视图模型,Durandal在其中一个视图的错误位置查找,生成404错误(HTML中的一条可怕的红色文本消息说无法找到该视图然后一两秒钟后在正确的位置查看视图并正确呈现它。
我不知道在哪里开始对此进行故障排除,因为我正在以完全相同的方式在屏幕上组合其他四个元素,并且这些元素的行为正确。
这里是父视图的样子:
<div class="file-browser-container" data-bind="busy: folderTree.folderRootChanging">
{{#compose {model: entityContext, view: 'views/contextSelector.html' }}}
{{/compose}}
<div class="file-pane-container u-clearfix" data-bind="if: entityContext.selectedAccount">
{{#compose {model: folderTree, view: 'views/folderTree.html', activationData: entityContext.selectedAccount} }}{{/compose}}
{{#compose {model: fileList, view: 'views/fileList.html'} }}{{/compose}}
{{#compose {model: fileUpload, view: 'views/fileUpload.html', activationData: { folderTree: folderTree, fileListing: fileList}} }}{{/compose}}
</div>
然后,folderTree.html视图执行以下附加组合:
<section class="folder-view-pane" data-bind="busy: folderTreeUpdating">
<h4>Available Folders</h4>
<ul class="folder-node" data-bind="">
{{#compose {model: currentFolderRoot, view: 'views/partial/folderNode.html', preserveContext: true}}}{{/compose}}
</ul>
我正在使用knockout.punches(但请相信我,我已经尝试过使用标准的ko无容器语法,这不是问题。)
folderNode组合是不起作用的,durandal \ require出去查找&#34; base / app / views / views / partial / folderNode.html&#34;这是错误的,然后正确查看&#34; base / app / views / partial / folderNode.html&#34;所以当视图从错误到渲染视图时,我们的用户会得到一个非常粗糙的闪光效果。
我已经尝试将view / html与其他人一起移动到views目录中,这没什么区别。令人兴奋的是,当我更改构图以查找视图时:&#39; partial / folderNode.html&#39;然后要求进入&#39; base / app / partial / folderNode.html&#39;而且很明显失败了。
有关为什么杜兰达会选择在错误的地方寻找的任何见解?它与另一个组合元素内部的组合有关吗?
最后,我们正在使用:
viewLocator.useConvention();
在main.js文件中。
答案 0 :(得分:0)
有点晚了,但是从同样的问题来看,我找到了一个避免RequireJS 404的解决方案: 你必须将一个成员函数添加到名为getView()的组合对象(folderTree,fileList ...)中。该成员可以返回一个字符串,将其解释为视图网址,如下所述: http://durandaljs.com/documentation/View-Location.html 祝你好运!