2012-05-06 14 views
2

これまではknockoutJSとjQueryを問題なく使用してきましたが、htmlにprototype.jsファイルを含めるだけで、アプリケーションの起動時にいくつかのエラーが発生します。私はjQueryとprototypejsの間の競合を避けるために、最初はjQuery.noConflict()を実行しますが、明らかに問題は解決しません。KnockoutJS&jQuery(noConflict)&prototype.js = conflict?

<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ない次のようにコードとerrosです。 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

アプリ内で実装するように依頼されたプロトタイプコードがいくつか与えられていましたが、最終的には完成されているため、縮小されていても、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の後の任意の時点でjQuery.noConflict()を呼び出すと、そのデフォルトをオーバーライドすることができます。返信いただきありがとうございますが、それはうまくいかず、上記のリンクの示唆の反対です。 –

0

は、私はあなたのコードのどこかのjQueryを使用して、そしてそれにアクセスするために$を使用しようとして実際にかもしれないと思います。プロトタイプが後で読み込まれるため、jQuery.noConflict();への呼び出しは実際には何もしません。 jQueryがそれを変更する前に$を設定していたので、jQueryをプロトタイプの後にロードした場合、プロトタイプに戻すことになりました。

ページがロードされていないときに動作するので、まだプロトタイプを使用していないようですので、そこにプロトタイプへの参照を残しておき、その後に.noConflictスクリプトを変更してください。

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

コードが動作すれば、コードはどこかで$を使用し、$でjQueryまたはプロトタイプを表現するかどうかを決定する必要があります。

+0

ありがとうございます。 jqueryをロードしようとした後、プロトタイプをロードして、提案したコードを実行し、$が関数ではないことを確認します。 [Break On This Error] \t element = $(element);以前のエラーと一緒に –