2013-04-29 59 views
0

我創建一個小部件,爲此,我已經像這樣初始化的jQuery:無法使用jQuery與服務器端的Rails小部件

# widget.js 
(function() { 
    var jQuery; 
    var root_url = "<%= root_url%>"; 

    if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.9.1') { 
    var jquery_script = document.createElement('script'); 
    jquery_script.type = "text/javascript"; 
    jquery_script.asyc = true; 
    jquery_script.src = "http://code.jquery.com/jquery-1.9.1.js"; 

    if (jquery_script.readyState) { 
     script_tag.onreadystatechange = function() { // For old versions of IE 
     if (this.readyState == 'complete' || this.readyState == 'loaded') { 
      scriptLoadHandler(); 
     } 
     }; 
    } else { // Other browsers 
     jquery_script.onload = scriptLoadHandler; 
    } 

    var node = document.getElementsByTagName('script')[0]; 
     node.parentNode.insertBefore(jquery_script, node); 
    } else {  
    jQuery = window.jQuery; 
    main(); 
    } 

    function scriptLoadHandler() { 
    jQuery = window.jQuery.noConflict(true); 
    main(); 
    } 

    function main() { 
    jQuery(document).ready(function($) { 
     // jQuery works great here! 
     // But not so much in rendered partials or in server-side JS actions 
    } 
    } 
})(); 

如果我做一個Ajax請求到我的服務器響應,並用JS行動,我不能在我的action.js.erb文件中使用jQuery。它吐出了錯誤$ is not a function

同樣,即使使用jQuery腳本渲染partials也會產生相同的結果。

我想我沒有設置jQuery的全局實例,如果是這種情況,我不知道該怎麼做。也許我不應該?

我該如何解決這個問題?

+0

我認爲它是因爲你使用jquery.noconflict,當你使用這個$符號變得不可用時,不再有別名 – Richlewis 2013-04-29 14:08:39

+0

@Richlewis嗯真的嗎?我認爲你可能會找到一些東西。我從未考慮過這個。那麼,我會如何糾正其他jQuery實例呢? – 2013-04-29 17:29:48

回答

0

這個解決方案不是我一直在尋找的,但我能夠將本地JS小部件的元素與iframe結合在一起。一旦我在第三方網站上操作任何我需要的元素(按照我的小部件的功能),我會渲染一個部分外殼,使得我可以完全控制環境。

相關問題