2

当软键盘启动时,我正在开发的 JQuery Mobile 应用程序往往会崩溃。我已经实现了一个解决方案并且效果很好,但是我必须直接编辑 jquery.mobile-1.2.0.js 才能做到这一点。我宁愿将我的更改保留在扩展 jQuery Mobile 的 jquery.mobile.customizations.js 文件中。

我尝试执行以下操作但没有成功:

delete $.mobile.getScreenHeight;
$.mobile.last_width = null;
$.mobile.last_height = null;
$.mobile.getScreenHeight = function() 
{
   // My modified version
}

我将警报语句添加到我的$.mobile.getScreenHeight,加上原来的 $.mobile.getScreenHeight. 我确实看到我的自定义方法的警报被触发,但有时它也会在原始函数中触发警报。

有谁知道在 $.mobile 中覆盖方法并添加两个新属性的正确方法?

(有关原始问题的完整详细信息在window.resize 中,因为虚拟键盘会导致 jquery mobile 出现问题

更新:

@elclanrs - 我试图实现下面的代码但没有运气。我也试过交换第二个和第三个参数。每当我运行代码时,它都会触发我的扩展 getScreenHeight,但随后会触发基础 getScreenHeight。(我挖空了原来的 getScreenHeight 并在里面放了一个警报。那个警报永远不应该触发。

打开思想!

$.mobile = $.extend( {}, $.mobile, {
    last_width: null,
    last_height: null,
    getScreenHeight: function() {
        // My code...
    }
} );
4

1 回答 1

0

违规行似乎是getScreenHeight = $.mobile.getScreenHeight;将当前定义放在resetActivePageHeight函数的闭包中。我不确定是否可以在不编辑文件的情况下直接覆盖它,但您可以在下游将其关闭:

  //simply set the active page's minimum height to screen height, depending on orientation
  function resetActivePageHeight() {
    var aPage = $( "." + $.mobile.activePageClass ),
      aPagePadT = parseFloat( aPage.css( "padding-top" ) ),
      aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ),
      aPageBorderT = parseFloat( aPage.css( "border-top-width" ) ),
      aPageBorderB = parseFloat( aPage.css( "border-bottom-width" ) );

    aPage.css( "min-height", getScreenHeight() - aPagePadT - aPagePadB - aPageBorderT - aPageBorderB );
  }


  //set page min-heights to be device specific
  $( document ).bind( "pageshow", resetActivePageHeight );
  $( window ).bind( "throttledresize", resetActivePageHeight );

定义你自己的resetActivePageHeightthenunbindbinding 可能会成功。有点乱。

于 2012-10-16T04:35:20.897 回答