Javascript 如何开始使用带有Durandal SPA应用程序的Phonegap构建?

Javascript 如何开始使用带有Durandal SPA应用程序的Phonegap构建?,javascript,cordova,durandal,phonegap-build,Javascript,Cordova,Durandal,Phonegap Build,我用Durandal做了一个水疗中心,在浏览器中一切都很好。我现在要做的是用Phonegap(理想情况下使用Phonegap构建)将其打包,并将其部署为Android应用程序 关于主题()的Durandal文档非常稀少。优化应用程序以生成一个main-build.js文件的关键点在于将js/css资产收集到一个地方 但是,它没有提到Phonegap/Cordova有一个设备就绪事件,而不是一个文档就绪事件。我已经按照说明打包了应用程序。它可以安装在我的Android设备上,但在启动屏幕上卡住了。

我用Durandal做了一个水疗中心,在浏览器中一切都很好。我现在要做的是用Phonegap(理想情况下使用Phonegap构建)将其打包,并将其部署为Android应用程序

关于主题()的Durandal文档非常稀少。优化应用程序以生成一个main-build.js文件的关键点在于将js/css资产收集到一个地方

但是,它没有提到Phonegap/Cordova有一个
设备就绪
事件,而不是一个
文档就绪
事件。我已经按照说明打包了应用程序。它可以安装在我的Android设备上,但在启动屏幕上卡住了。还有一些问题是关于被困在启动屏幕上的问题,但是上面发布的解决方案没有帮助。我忍不住觉得这里缺少了一些基本的东西

我是否需要在index.html中包含特定于Phonegap的代码?在任何javascript中

注意:我使用的是Durandal 1.2,但同样的问题也适用于v2.0

但是,它没有提到Phonegap/Cordova具有设备就绪事件而不是文档就绪事件

jQuery可以通过
$(document.ready
监听document ready,但HTML/javascript本身没有document ready事件。最接近的纯javascript等价物是侦听
DOMContentLoaded
事件。Phonegap/Cordova提供了记录在案的设备就绪事件。确保在
标记中包含

它可以安装在我的Android设备上,但在启动屏幕上卡住了

看看您的config.xml。你有没有
将xxxx设置为某个疯狂的高数字


在设备就绪启动后,您始终可以调用
navigator.splashscreen.hide()
,但您需要在deviceready listiner中构建。使用我上面提供的文档很容易做到。如果这不能解决问题,那么我们需要查看一些代码,以深入了解正在发生的事情。

首先尝试未统一的版本。表示将所有文件夹复制到您的资产文件夹中。然后看看logcat。很可能是你犯了js错误。如果可行,请尝试缩小版本,并检查该版本是否通过logcat抛出错误


编辑:sry这当然只适用于android中的手动构建,而不适用于在线服务。据我所知,对于IOS,您会在输出窗口中抛出错误。

您可以挂接main.js中的Phonegap device ready事件,然后可以确保在触发shell或任何view activate事件之前设备已准备就绪。本例检查代理,使其仍能在浏览器中启动。这来自我的示例Durandal 2/Phonegap构建项目


谢谢你!这正是我要找的东西。我对您所做的修改仍然失败,但我还没有机会进行适当的调试,所以我将看看它是如何进行的。

define(['durandal/app', 'durandal/viewLocator', 'durandal/system'], boot);

function boot(app, viewLocator, system) {
    var useragent = navigator.userAgent.toLowerCase();
    if (useragent.match(/android/) || useragent.match(/iphone/) || useragent.match(/ipad/) || useragent.match('ios') || useragent.match('Windows Phone') || useragent.match('iemobile')) {
        document.addEventListener('deviceready', onDeviceReady, false);
    }
    else {
        onDeviceReady();
    }

    function onDeviceReady() {
        app.title = 'Landmark Tracker';

        app.configurePlugins({
            router: true
        });

        app.start().then(function () {
            viewLocator.useConvention();
            app.setRoot('viewmodels/shell', 'entrance');
        });
    }
}