使用apache cordova 2.7版时出现问题。在浏览器中,代码似乎工作正常,因为我从xampp运行它。但是当我尝试编译到IOS时它只是不起作用。
我认为该问题可能与require.js文本插件有关,该插件用于加载把手模板和html文件,因为加载文件时存在文件协议限制。
我也认为这可能与不听设备就绪事件有关,但我不确定如何在此设置中正确执行此操作。
我们的main.js代码是:
require.config({
shim: {
underscore: {
exports: '_'
},
backbone: {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
handlebars: {
exports: 'Handlebars'
},
flipBook: {
deps: ['jquery']
},
touchSlider: {
deps: ['jquery']
}
},
paths: {
jquery: 'libs/jquery',
jquerymobile: 'libs/jquery.mobile',
underscore: 'libs/underscore',
backbone: 'libs/backbone',
handlebars: 'libs/handlebars',
cordovaios: 'libs/cordova-2.7.0',
text: 'libs/text',
flipBook: 'plugins/flipbook.min',
touchSlider: 'plugins/jquery.touchSlider.min'
}
});
// Includes File Dependencies
require(["cordovaios", "jquery", "backbone", "routers/router"], function(
cordova, $, Backbone, Router) {
// Set up the "mobileinit" handler before requiring jQuery Mobile's module
$(document).on("mobileinit", function() {
window.App = {
Models: {},
Collections: {},
Views: {},
Routers: {}
};
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;
$(document).on('pagehide', 'div[data-role="page"]', function(event, ui) {
$(event.currentTarget).remove();
});
$(document).on('pagebeforeshow', 'div[data-role="page"]', function () {
$.mobile.showPageLoadingMsg();
});
$(document).on('pageshow', 'div[data-role="page"]', function () {
$.mobile.hidePageLoadingMsg();
});
document.addEventListener('touchmove', function (e) {
e.preventDefault();
});
});
require(["jquerymobile"], function () {
// Instantiates a new Backbone.js Mobile Router
new Router();
});
});
答案 0 :(得分:2)
在您的配置中,您不必指定文本插件。我认为您需要做的就是设置基本URL并在那里插入插件。我有一个项目,我参考
require.config({
baseUrl: 'asesets/js/libs'
});
然后我将文本插件保留在那里,它会自动获取参考。不过这样做的缺点是你必须为其他事情改变一些路径引用。
第二个问题是文件准备就绪。我还没有测试过这个,因为我的应用程序无需检查设备是否准备就绪,因为JS位于HTML的底部。然而,还有一些其他领域有phonegap我认为你必须首先检查。所以我认为(再次未经测试)您需要做的就是使用requirejs load事件。 http://requirejs.org/docs/api.html#pageload
希望有所帮助。我今晚可能会测试出来的文件,如果有效的话会更新。