尝试使用 PhoneGap、Jquery Mobile 和 Requirejs 将 iOS/Android Html5 应用程序移植到 WP8。
应用程序失败,提示模块未加载
错误:[“无法获取未定义或空引用文件的属性“调试”:x-wmapp0:www/scripts/main.js 行:60”,“DebugConsole404227917”]
此消息表示来自 Config.js 的 Config 对象为 null。
我认为这个问题是由模块的错误相对路径引起的,由于某种原因在 WP8 中有所不同,但是我找不到正确的组合。
有人对 WP8 上的 requirejs 有任何经验吗?我做了很多搜索,但没有找到任何东西(不是很多)似乎有帮助。
由 require.js 加载的 main.js 文件,文件本身被执行并且调试消息来自它,但不是来自 require.function(..) 块。
我正在使用 requirejs(2.1.8) 和 jquery-mobile(1.3.1) 和 phonegap(2.9.0)
require.config({
// modules
paths: {
'domReady' : 'vendor/domReady',
'jquery' : 'vendor/jquery.min',
'jquery.mobile' : 'vendor/jquery.mobile-1.3.1.min',
'handlebars' : 'vendor/handlebars',
'AppHistory' : 'modules/AppHistory',
'CatalogController' : 'modules/CatalogController',
'CleaningController' : 'modules/CleaningController',
'Config' : 'modules/Config',
'Consultants' : 'modules/Consultants',
'CoverageController' : 'modules/CoverageController',
'ExternalDataHandler' : 'modules/ExternalDataHandler',
'Languages' : 'data/LanguageData',
'LanguageController' : 'modules/LanguageController',
'LocalStorage' : 'modules/LocalStorage',
'ProductDetailController' : 'modules/ProductDetailController',
'Scanner' : 'modules/BarcodeScanner',
'SeminarController' : 'modules/SeminarController',
'SeminarDetailController' : 'modules/SeminarDetailController',
'TechnicalRequest' : 'modules/TechnicalRequest',
'TemplateEngine' : 'modules/TemplateEngine'
},
// dependencies
shim: {
'jquery' : {
exports: 'jQuery'
},
'jquery.mobile' : ['jquery'],
'handlebars' : {
exports: 'Handlebars'
}
},
urlArgs: 'rev=v3' // production setting
// urlArgs: 'rev=' + (new Date()).getTime() // development setting
});
require(['domReady', 'jquery', 'app', 'Config', 'jquery.mobile'],
function(domReady, $, App, Config) {
'use strict';
if (Config.debugging || window.location.search.match(/debug/)) {
// for production enable debug mode by get param "?debug=true"
debug = true;
}
// domReady is RequireJS plugin that triggers when DOM is ready
domReady(function () {
function onDeviceReady(desktop) {
// Hiding splash screen when app is loaded
if (desktop !== true) {
cordova.exec(null, null, 'SplashScreen', 'hide', []);
}
Config.platform = (window.device && window.device.platform) ? window.device.platform : 'WebApp';
Config.eventType = 'click'; // kein touchevent mehr verwenden
// globale Konfiguration für jQuery und jQuery Mobile
$.support.cors = true;
$.mobile.ajaxEnabled = false;
$.mobile.allowCrossDomainPages = true;
$.mobile.defaultPageTransition = 'fade';
$.mobile.hashListeningEnabled = false;
// $.mobile.linkBindingEnabled = false;
$.mobile.pushStateEnabled = false;
$.mobile.touchOverflowEnabled = true;
App.initialise(desktop);
}
/*
Wir checken nicht nur, ob es sich um ein mobiles Gerät handelt, sondern
ob auch Phonegap aka Cordova initialisiert ist, sprich mit der nativen
API und somit dem mobilen Endgerät spricht.
*/
if (window.device && window.device.platform && window.device.platform.match(/Android|iOS|Win32NT/)) {
// This is running on a device so waiting for deviceready event
document.addEventListener('deviceready', onDeviceReady, false);
} else {
// On desktop don't have to wait for anything
onDeviceReady(true);
}
});
}
);