require.js,backbone和cordova问题

时间:2013-05-22 13:35:34

标签: cordova backbone.js text requirejs

使用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();
   });
});

1 个答案:

答案 0 :(得分:2)

在您的配置中,您不必指定文本插件。我认为您需要做的就是设置基本URL并在那里插入插件。我有一个项目,我参考

require.config({
     baseUrl: 'asesets/js/libs'
});

然后我将文本插件保留在那里,它会自动获取参考。不过这样做的缺点是你必须为其他事情改变一些路径引用。

第二个问题是文件准备就绪。我还没有测试过这个,因为我的应用程序无需检查设备是否准备就绪,因为JS位于HTML的底部。然而,还有一些其他领域有phonegap我认为你必须首先检查。所以我认为(再次未经测试)您需要做的就是使用requirejs load事件。 http://requirejs.org/docs/api.html#pageload

希望有所帮助。我今晚可能会测试出来的文件,如果有效的话会更新。