2012-05-06 80 views
2

到目前爲止,我已經使用knockoutJS和jQuery已經沒有任何問題,但是僅僅包括我的html中的prototype.js文件,在啓動應用程序導致了幾個錯誤。我在開始時運行jQuery.noConflict()以避免jQuery和prototypejs之間的衝突,但顯然它不能解決問題。碼和誤差修改如下:KnockoutJS&jQuery(noConflict)&prototype.js =衝突?

<script type="text/javascript" src="js/jquery/jquery-1.6.4.min.js"></script> 
<script type="text/javascript" src="js/jquery/jquery-ui-1.8.16.custom.min.js"></script> 
<script type="text/javascript" src="js/jquery/jquery.dataTables.min.js"></script> 
<script type="text/javascript" src="js/jquery/jquery-contextmenu.js"></script> 
<script type="text/javascript" src="js/jquery/jquery.tmpl.js"></script> 

<script type="text/javascript" src="js/prototype.js"></script> 

<script type="text/javascript"> 
    jQuery.noConflict(); 
</script> 

<!-- knockout library --> 
<script type="text/javascript" src="js/knockout-1.2.1.js"></script> 
<script type="text/javascript" src="js/knockout.mapping-latest.js"></script> 

//////////////

currentServerTree [鍵] .serverName不是函數 匿名()敲除-1.2。 1.js(第11行)

Za(a=" { text: scoringFunctio...n = __ko_value; } } } ", b=Object { preferenceName=d(), selectedServer=d(), selectedDatabase=d(), more...})knockout-1.2.1.js (line 11) 
J()knockout-1.2.1.js (line 44) 
j()knockout-1.2.1.js (line 34) 
j(e=function(), d=null, b=Object { disposeWhenNodeIsRemoved=textarea#inScoreFunction.inputField, read=function(), disposeWhen=function()})knockout-1.2.1.js (line 36) 
J(e=textarea#inScoreFunction.inputField, d=null, b=Object { preferenceName=d(), selectedServer=d(), selectedDatabase=d(), more...}, a="data-bind")knockout-1.2.1.js (line 45) 
ua(a=textarea#inScoreFunction.inputField)knockout-1.2.1.js (line 45) 
g(a=[input#singleTable.inputField Constant, input#joinTable.inputField Variable, th, 16 more...], b=function())knockout-1.2.1.js (line 8) 
ua(e=Object { preferenceName=d(), selectedServer=d(), selectedDatabase=d(), more...}, d=table#attributesTable4)knockout-1.2.1.js (line 45) 
()index.jsp (line 1052) 
[Break On This Error] 

...rn "+a))();return(new Function("sc","with(sc) { return ("+a+") }"))(b)},Fa:funct... 

如果我刪除的prototype.js線,一切都運行得很好。任何想法可能導致這個問題?謝謝!

+1

你真的不應該在開發過程中使用縮小的庫。當你已經有jQuery時,你爲什麼需要原型?! – ThiefMaster

+0

我得到了一些預先編寫的原型代碼,有人問我的應用程序(其中有據說已經敲定,因此minifieds)內實施,寧可不要轉換爲jQuery的,但我認爲這將是可能的。 –

+0

你使用jQuery嗎?你在任何地方使用$?什麼是currentServerTree? –

回答

0

noConflict的目的()是從jQuery的刪除「$」符號,從而使原型用它代替。爲了讓它工作,必須原型實際上載入前運行:

<script type="text/javascript" src="js/jquery/jquery-1.6.4.min.js"></script> 
<script type="text/javascript" src="js/jquery/jquery-ui-1.8.16.custom.min.js"></script> 
<script type="text/javascript" src="js/jquery/jquery.dataTables.min.js"></script> 
<script type="text/javascript" src="js/jquery/jquery-contextmenu.js"></script> 
<script type="text/javascript" src="js/jquery/jquery.tmpl.js"></script> 

<script type="text/javascript">jQuery.noConflict();</script> 

<script type="text/javascript" src="js/prototype.js"></script> 

<!-- knockout library --> 
<script type="text/javascript" src="js/knockout-1.2.1.js"></script> 
<script type="text/javascript" src="js/knockout.mapping-latest.js"></script> 
+0

http://docs.jquery.com/Using_jQuery_with_Other_Libraries但是,您可以覆蓋默認通過在任何時候調用jQuery.noConflict()jQuery和其他圖書館也都加載之後。感謝您的回覆,但它不起作用,這與上面的鏈接所暗示的相反。 –

0

我想你可能在你的代碼的某個地方使用jQuery,並試圖用$訪問它是實際。您撥打jQuery.noConflict();的電話實際上不會執行任何操作,因爲原型稍後會加載。它的目的是將$設置回jQuery改變之前的狀態,所以如果你在原型之後加載了jQuery,它會將$設置回原型。

它看起來像您不使用原型還因爲頁作品時沒有加載它,所以儘量離開參考那裏原型,並在其後更改.noConflict腳本,這只是爲了看看它的工作原理:

<script type="text/javascript"> 
    $ = jQuery; 
</script> 

如果這樣做,那麼你的代碼使用$某處,你需要決定是否要$代表jQuery或原型。

+0

感謝您的意見。試圖加載了jQuery,然後加載原型,然後運行你的建議,並得到了$代碼是不是函數 [打破這個錯誤] \t 元= $(元);以及以前的錯誤 –