【问题标题】:jquery mobile require.js and backbonejquery mobile require.js 和骨干网
【发布时间】:2012-06-09 21:23:36
【问题描述】:

我真的在为 require.js 和 jquery mobile 苦苦挣扎。我有一个基于松散的文件结构和加载模式

https://github.com/appboil/appboil-requirejs-backbonejs-jquerymobile-phonegap

但它已经过时了,我不得不对 require 2.0 版本进行调整。是否有社区接受的方式将 jquery mobile、backbonejs 和 requirejs 一起使用?我想使用骨干网的路由而不是 jquery 手机。此外,该模板有 phonegap,我不关心。

【问题讨论】:

  • 对于所有圣洁和纯洁的事物,我可能已经想通了。我会测试,如果它确实有效,我会在 github 上提供一个链接的源代码。

标签: jquery-mobile backbone.js requirejs


【解决方案1】:

这是我使用的 main.js 文件...

require.config({
  baseUrl: "/js/",
  paths: {
    jquery: 'libs/jquery/jquery-1.7.1',
    'jquery.mobile-config': 'libs/jqm/jquery.mobile-config',
    'jquery.mobile': 'libs/jqm/jquery.mobile-1.1.0',
    'jquery.mobile.asyncfilter': 'libs/jqm/asyncfilter',
    underscore: 'libs/underscore/underscore-1.3.3',
    backbone: 'libs/backbone/backbone-0.9.2',
    templates: '../templates'
  },
  shim: {
          'underscore': {
            exports: "_"
          },
          'backbone': {
              //These script dependencies should be loaded before loading
              //backbone.js
              deps: ['jquery','underscore'],
              //Once loaded, use the global 'Backbone' as the
              //module value.
              exports: 'Backbone'
          },
          'jquery.mobile-config': ['jquery'],
          'jquery.mobile': ['jquery','jquery.mobile-config'],
          'jquery.mobile.asyncfilter': ['jquery.mobile'],
        }
});

require([
  'jquery',
  'app',
  'jquery.mobile','jquery.mobile.asyncfilter'
], function( $, App ){
    $(function(){
      App.initialize();
    });
});

最后一点对于让 JQM 正确加载(并实际运行)非常重要。这部分:

require([
      'jquery',
      'app',
      'jquery.mobile','jquery.mobile.asyncfilter'
    ], function( $, App ){
        $(function(){
          App.initialize();
        });
    });

由于我需要 jquery for jqm (jquery mobile),我将全部加载它们,并且由于上面的 shim 代码,依赖项以正确的顺序加载。我实际上并没有将任何 jqm 变量传递给函数调用,它只传递 $ 和 App.下一个重要部分是 jqm-config 文件:

define(['jquery'], function ($) {
      $(document).on("mobileinit", function () {
          $.mobile.ajaxEnabled = false;
          $.mobile.linkBindingEnabled = false;
          $.mobile.hashListeningEnabled = false;
          $.mobile.pushStateEnabled = false;
      });
});

您可以将 jqm 的所有预初始化代码放在该文件中。毕竟,你应该可以使用jqm了!

【讨论】:

  • 嗨,谢谢!我能够让所有工作,包括我的 jqm 预初始化代码,但是,我不明白“jquery.mobile.asyncfilter”。有什么提示吗?
  • 对不起,这是我为 jqm 写的一个数据过滤插件。你可以删除它。不过,这就是您启动其他 jqm 或 jquery 插件的方式。
  • 嘿,这是一个很大的帮助,谢谢。我收到以下错误:TypeError: mpc is undefined [Break On This Error] mpc.trigger( pbcEvent, triggerData ); 即使在您进行了更改之后,它也会显示出来,但只是每隔一次。有什么想法吗?
  • 不确定 mpc 是什么。每隔一段时间都会出错吗?呸。可能想打开一个关于它的新 SO 问题。
  • mpc 代表移动页面容器。这是一个应该在移动初始化之后运行的代码,但是由于我使用主干运行$.mobile.changePagempc.trigger 最终在移动初始化之前运行。一旦我有时间设置一个小样本,我会设置一个新问题。
【解决方案2】:

您可以查看最近发布的 backbonejs boilerplate 或查看 christophe 的 backbone directory,其中包含启动基本应用程序所需的所有内容。

编辑

https://github.com/raDiesle/backbone.js-jquerymobile-boilerplate-template

【讨论】:

  • 很遗憾,不是使用jqm的例子。
  • backbone-directory 中有一个仅使用 jquery mobile 的子文件夹
  • 哎呀,我的眼睛错过了您答案中的第二个链接。虽然没有使用 require.js,但这是一个有趣的例子。
【解决方案3】:

我刚刚在 jQuery Mobile 文档中添加了一个主干.js、require.js 和 jQuery Mobile 小示例应用程序。让我知道这是否有帮助:

http://demos.jquerymobile.com/1.4.4/backbone-requirejs/backbone-require.html

【讨论】:

  • 该页面确实帮助了我,但现在它正在重定向到新的 jquery 1.3 文档。如果可以的话请恢复它
  • 再次更新。如果您仍有问题,请告诉我。
  • 我在该示例中的任何地方都看不到主干,只有 require.js。
  • @PeterNore 你读过整篇文章吗?此外,这里是示例应用程序的来源:github.com/jquery/jquery-mobile/tree/master/demos/examples/…
  • @GregFranko - 抱歉,我是 RequireJS 新手,没有意识到 require 脚本标签上的 data-main="js/mobile" 意味着我可以找到引用的包含依赖项在 js/mobile.js。谢谢!
【解决方案4】:

如果您使用 r.js,requirejs 优化器,这是一个关于 jquery.mobile 和配置问题的兴趣链接: https://github.com/jrburke/requirejs/issues/358

【讨论】:

  • 这解决了我的问题。特别要注意 shim 文档中的注释:“shim 配置仅设置代码关系。要加载属于或使用 shim 配置的模块,需要正常的 require/define 调用。单独设置 shim 确实不会触发代码加载。”
猜你喜欢
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
相关资源
最近更新 更多