0

我有一个使用 jquery mobile 的 Rails 3.2.9 应用程序。

我使用 jquery_mobile_rails gem 来嵌入 jqm 和 mobylette gem 来检测请求何时来自移动设备。

在开发环境中一切正常(Webrick)

生产环境基于 apache/passenger。当我运行 rake assets:precompile all 似乎一切顺利,如果我查看 assets/manifest.yml 我可以看到一切似乎都很好。

当我调用欢迎页面时,登录表单被发送到浏览器,但是在开发环境中,页面具有所有 jqm 格式,在生产中,html 没有“注入”所需的 JQM 代码,因此例如标签很简单

<body>

代替

<body class="ui-mobile-viewport ui-overlay-c">

因此,似乎在加载页面后,应该运行的 javascript 并使用 JQM 特定代码“丰富”html 没有被触发。

关于为什么会发生这种情况的任何提示?

编辑

assets
  javascripts
    application.js
    mobile
      application.js

views
  layouts
    application.html.erb
    application.mobile.erb

清单文件是:

javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require_directory .


javascripts/mobile/application.js

//= require jquery.mobile
//= require_directory .
4

2 回答 2

0

问题是由于最新版本的 jquery 和 jquery mobile 之间的不兼容造成的。

2012 年 10 月 2 日发布的 jquery mobile 1.2.0 与上一个 jquery 版本 1.9.x 存在问题。

具体来说,jquery 1.9 删除了在 jquery mobile 1.2.0 中使用的 $.browser 方法。

因此,当 jqwery mobile 尝试初始化页面上的对象时,它会因错误而死

TypeError: 'undefined' is not an object (evaluating 'e.browser.msie')

我通过强制使用 jquery 1.8.3 解决了这个问题;在 Gemfile

gem 'jquery-rails', '~> 2.1.4'

其中包括资产管道中的 jquery 1.8.3。

如果没有 BB Z10 上的网络检查器(或 android 4 设备上的远程调试功能),我将永远无法在移动平台上检测到此类 javascript 问题。

最后,BlackBerry Z10 Web Inspector 通过 Wi-Fi 工作,而 Android 设备需要 USB 连接才能进行远程调试工作。

于 2013-02-17T14:03:29.140 回答
0

In case you would like to include a bunch of files from a particular directory (or a library ) ,you can use index manifest file (look for 2.1.2). It is really simple:

  • in your directory (app/assets/javascripts/mobile) create a file index.js with content :

    //= require_self
    //= require other_files_you_want
    

(and optionaly):

    //= require_tree .
  • then in your application.js manifest file you can require the library with the name of the directory , in which you have created the index.js file :

    //= require mobile
    

I would suggest, when you pass these steps, to remove the file app/assets/javascripts/mobile/application.js. It is not a good style in one app to have more than one file with the name application.js.

EDIT (after taking a look at the application.css):

I would suggest a couple of corrections in your manifest file application.css:

  • move the css code in a new file (for example app/assets/stylesheets/custom.css.scss)
  • if there are others css libs that you use , include them like normal (*= require your_css) in your application.css.
于 2013-02-16T08:02:19.250 回答