Navigation Cordova Typescript应用程序+;WinJS.UI.Pages.render在Win8、WP8上失败,但在Android上工作

Navigation Cordova Typescript应用程序+;WinJS.UI.Pages.render在Win8、WP8上失败,但在Android上工作,navigation,typescript,winjs,visual-studio-cordova,multi-device-hybrid-apps,Navigation,Typescript,Winjs,Visual Studio Cordova,Multi Device Hybrid Apps,我正在使用微软针对Typescript和WinJS的多设备混合应用程序模板创建一个单页导航应用程序。该应用为Win8、WP8和Android构建,并部署到模拟器上。但是,Win8和WP8应用程序无法正确导航到应用程序的第一页。Android使用相同的代码导航很好 WinJS具有导航状态保存功能,但实际上并不自己进行导航。我从Typescript/WinJS示例Encyclopedia中借用了实际的导航代码 似乎失败的相关部分如下所示: args.detail.setPromise(

我正在使用微软针对Typescript和WinJS的多设备混合应用程序模板创建一个单页导航应用程序。该应用为Win8、WP8和Android构建,并部署到模拟器上。但是,Win8和WP8应用程序无法正确导航到应用程序的第一页。Android使用相同的代码导航很好

WinJS具有导航状态保存功能,但实际上并不自己进行导航。我从Typescript/WinJS示例Encyclopedia中借用了实际的导航代码

似乎失败的相关部分如下所示:

 args.detail.setPromise(
            WinJS.Promise.timeout().then(function () {
                if (oldElement.winControl && oldElement.winControl.unload) {
                    oldElement.winControl.unload();
                }
                return WinJS.UI.Pages.render(args.detail.location, newElement, args.detail.state, parented);
            }).then((control) => {
                    this.element.appendChild(newElement);
                    this.element.removeChild(oldElement);
                    oldElement.innerText = "";
                    this.navigated();
                    parentedComplete();
                })
            );
在Android上,render命令返回后,元素的innerHTML包含路径(args.detail.location)中指向的页面。在Win8和WP8上,元素仍然为空

这部分代码由root index.html文件中特定于WinJS的html触发

<div id="contenthost" data-win-control="TurnstileTS.PageControlNavigator" data-win-options="{home: './views/home/HomeView.html'}"></div>
事实上,这里有很多这样的信息。所以,有点不对劲

我读到一些关于使用起始斜杠作为路径的内容,这对于Windows/Cordova应用程序来说是不可接受的,因此我尝试重写它们。如果javascript文件与html文件位于同一子目录中,则路径引用应仅为不带斜杠的文件名。但是,javascript控制台显示,这在Win8中被解释为表示www文件夹的根(在构建期间生成)。如果我尝试使用“/views/home/HomeView.css”将其硬编码到实际路径,它仍然找不到该文件。如果javascript控制台指示它试图在头部加载脚本,我不太清楚为什么HTML文档的主体没有加载

edit - 11/14/2014 - post CTP3 release!
MDHA模板似乎还有另一个问题。。。winstore-compat.js垫片文件用于使第三方库与Windows 8应用程序模型兼容(本机访问,而不是android或iOS等webview),使用WinJS导航模型时会导致MDHA模板出现问题。我正在将本地html片段打开到根html页面中的一个div中。。。垫片截取该片段并以导致整个页面以静默方式失败的方式对其进行修改。如果注释掉垫片,则导航功能正常。(位于merges/windows/scripts/platformOverrides.js中)这不是一个永久解决方案,因为这样您可能无法使用其他第三方库

问题已在WinJS github问题中注册

一个解决方案,虽然仍然令人沮丧,但是从已知的单页导航的工作示例开始,而不是从空白模板开始。

我之前链接的页面使用了所有JavaScript,并且可以使用开箱即用的单页导航。我保留了原来的index.html和index.js,但替换了所有子页面和脚本。它仍然有效。然后我添加了TypedMVVM框架文件,它仍然有效

我仍然不知道如何使用Typescript实现我自己的单页导航有什么问题,但现在我很高兴使用这个替代方案

编辑 -此外,我还发现Win8/WP8项目路径中的前导“/”字符工作不正常。我必须使用一个前导点“/”或不使用任何内容,并且所有路径都必须与当前html文件相关。(大量“.”转到上一个目录)

edit2 路径的前导点非常重要。Win8和WP8应用程序中的绑定根本不起作用,我最终在页面脚本中找到了一条简单的语句

这不起作用:

WinJS.UI.Pages.define("/views/main/MainView.html", new MainView());
这确实有效:

WinJS.UI.Pages.define("./views/main/MainView.html", new MainView());
发现这个后,我想打碎什么东西

MDHA模板似乎还有另一个问题。。。winstore-compat.js垫片文件用于使第三方库与Windows 8应用程序模型兼容(本机访问,而不是android或iOS等webview),使用WinJS导航模型时会导致MDHA模板出现问题。我正在将本地html片段打开到根html页面中的一个div中。。。垫片截取该片段并以导致整个页面以静默方式失败的方式对其进行修改。如果注释掉垫片,则导航功能正常。(位于merges/windows/scripts/platformOverrides.js中)这不是一个永久解决方案,因为这样您可能无法使用其他第三方库

问题已在WinJS github问题中注册

一个解决方案,虽然仍然令人沮丧,但是从已知的单页导航的工作示例开始,而不是从空白模板开始。

我之前链接的页面使用了所有JavaScript,并且可以使用开箱即用的单页导航。我保留了原来的index.html和index.js,但替换了所有子页面和脚本。它仍然有效。然后我添加了TypedMVVM框架文件,它仍然有效

我仍然不知道如何使用Typescript实现我自己的单页导航有什么问题,但现在我很高兴使用这个替代方案

编辑 -此外,我还发现Win8/WP8项目路径中的前导“/”字符工作不正常。我必须使用一个前导点“/”或不使用任何内容,并且所有路径都必须与当前html文件相关。(大量“.”转到上一个目录)

edit2 路径的前导点非常重要。Win8和WP8应用程序中的绑定根本不起作用,我最终在页面脚本中找到了一条简单的语句

这不起作用:

WinJS.UI.Pages.define("/views/main/MainView.html", new MainView());
这确实有效:

WinJS.UI.Pages.define("./views/main/MainView.html", new MainView());
发现这个后,我想打碎什么东西

MDHA模板似乎还有另一个问题。。。winstore-compat.js垫片文件用于使第三方库与Windows 8应用程序模型兼容(本机访问,而不是android或iOS等webview),使用WinJS导航模型时会导致MDHA模板出现问题。伊娃