2

これまでのところ、ノックアウトJSとjQueryを問題なく使用していますが、htmlにprototype.jsファイルを含めるだけで、アプリの起動時にいくつかのエラーが発生します。jQueryとprototypejsの競合を避けるために、最初にjQuery.noConflict()を実行しましたが、明らかに問題は解決しません。コードとエラーは次のとおりです。

<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[key].serverName は関数 anonymous()knockout-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...

プロトタイプ.js の行を削除すると、すべて正常に動作します。何が問題を引き起こしている可能性がありますか?ありがとうございました!

4

2 に答える 2

0

noConflict()の目的は、jQueryから「$」記号を削除して、プロトタイプが代わりにそれを使用できるようにすることです。それが機能するためには、Prototypeが実際にロードされる前にそれを実行する必要があります:

<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>
于 2012-05-06T11:29:24.150 に答える
0

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

ページがロードされていないときに機能するため、まだプロトタイプを使用していないようです。prototype への参照をそこに残しておき、.noConflict スクリプトを次のように変更して、機能するかどうかを確認してください。

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

それが機能する場合、コードはどこかで $ を使用しており、$ で jQuery を表すかプロトタイプを表すかを決定する必要があります。

于 2012-05-07T09:24:45.173 に答える