2016-03-01 23 views
0

對於我使用jQuery作爲依賴項的個人圖書館,我使用了我使用的jQuery版本,並更改​​了他們的代碼以將jQuery附加到我自己的個人對象上,而不是直接添加到窗口對象中。如何將jQuery Mobile附加到我自己的命名空間版本的jQuery?

所以不是

window.jQuery 

我的jQuery的訪問爲

window.myObjectName.jQuery 

這工作得很好,不過,我現在包含jQuery Mobile的,我無法找到的代碼的哪些部位在jQuery Mobile中進行更改以將其附加到myObjectName下的jQuery中。

有沒有人可以幫助我呢?這將不勝感激,請讓我知道如果您需要任何更多的信息,謝謝!

回答

0

我設法找出解決方案,並將其他人感興趣的解決方案。

jQuery Mobile的v1.4.5

望着jQuery Mobile的的美化版本,我們可以看到,有多個封裝,在這段代碼,我們可以看到頂部的參數傳遞由「root」的名稱

(function (root, doc, factory) { 
    if (typeof define === "function" && define.amd) { 
     // AMD. Register as an anonymous module. 
     define([ "jquery" ], function ($) { 
      factory($, root, doc); 
      return $.mobile; 
     }); 
    } else { 
     // Browser globals 
     factory(root.jQuery, root, doc); 
    } 
}(this, document, function (jQuery, window, document, undefined) {/*! 

此頂層函數是調用其餘代碼的工廠函數。如果記錄「root」的值,參數命名空間窗口對象,後跟文檔和回調函數。該命名空間窗口對象必須從「此」對象的名稱在連接了改變jQuery來,比如這個:

}(window.myObject, document, function (jQuery, window, document, undefined) {/*! 

這幾乎工作,有這一個步驟,因爲這會引起的jQuery移動在代碼中的這三個點引用的命名空間窗口對象時引發錯誤:

line 1472: window.navigator.userAgent.indexOf("Firefox") 
line 1473: window.navigator.userAgent.search(/CriOS/) 
line 1499: var ua = window.navigtor.userAgent; 

窗口對象jQueryM正在引用這些是您在上面改變的根名稱空間。對於這三個行代碼一個簡單的修正都設置爲jQuery Mobile的,外部的窗口對象的變量如像這樣:

var pseudoWindow = window; 
(function (root, doc, factory) { 
    if (typeof define === "function" && define.amd) { 

,然後爲三行代碼上方設置窗口參考參考這個變量

line 1472: pseudoWindow.navigator.userAgent.indexOf("Firefox") 
line 1473: pseudoWindow.navigator.userAgent.search(/CriOS/) 
line 1499: var ua = pseudoWindow.navigtor.userAgent; 

這將成功地使jQuery移動自己附加到一個不直接附加到窗口的jQuery。

只是爲了文檔,並回答@twernt,這裏是我如何將jQuery附加到我自己的自定義對象。

如果你打開了jQuery庫,你可以在底部附近找到其中的jQuery直接連接本身window對象:

var 

    // Map over jQuery in case of overwrite 
    _jQuery = window.jQuery, 

    // Map over the $ in case of overwrite 
    _$ = window.$; 

jQuery.noConflict = function(deep) { 
    if (window.$ === jQuery) { 
     window.$ = _$; 
    } 

    if (deep && window.jQuery === jQuery) { 
     window.jQuery = _jQuery; 
    } 

    return jQuery; 
}; 

// Expose jQuery and $ identifiers, even in 
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 
// and CommonJS for browser emulators (#13566) 
if (!noGlobal) { 
    window.jQuery = window.$ = jQuery; 
} 

return jQuery; 

,我只是相應地改變jQueries代碼將其自身附加到我的對象這樣的:

var 

    // Map over jQuery in case of overwrite 
    _jQuery = window.myObject.jQuery, 

    // Map over the $ in case of overwrite 
    _$ = window.$; 

jQuery.noConflict = function(deep) { 
    if (window.$ === jQuery) { 
     window.$ = _$; 
    } 

    if (deep && window.jQuery === jQuery) { 
     window.jQuery = _jQuery; 
    } 

    return jQuery; 
}; 

// Expose jQuery and $ identifiers, even in 
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 
// and CommonJS for browser emulators (#13566) 
if (!noGlobal) { 
    window.myObject.jQuery = window.myObject.$ = jQuery; 
} 

return jQuery; 

所以你可以在這裏看到,jQuery是永遠擺在首位連接直接 window對象,所以引用jQuery直接從window.jQuery之類的窗口中不起作用。

相關問題