2

到目前为止,我一直在使用 knockoutJS 和 jQuery,没有任何问题,但是仅在我的 html 中包含prototype.js 文件,在启动应用程序时会导致几个错误。我在开始时运行 jQuery.noConflict() 以避免 jQuery 和prototypejs 之间的冲突,但显然它并没有解决问题。代码和错误如下:

<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...

如果我删除prototype.js 行,一切都运行得很好。知道可能导致问题的原因吗?谢谢!

4

2 回答 2

0

我认为您可能实际上在代码中的某处使用了 jQuery,并尝试使用$它来访问它。您的调用jQuery.noConflict();实际上并没有做任何事情,因为原型是稍后加载的。它的目的是将 $ 设置回 jQuery 更改之前的状态,因此如果您在原型之后加载了 jQuery,它会将 $ 设置回原型。

看起来您还没有使用原型,因为该页面在未加载时可以工作,因此请尝试将原型的引用保留在其中并将其后的 .noConflict 脚本更改为此以查看它是否有效:

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

如果可行,那么您的代码在某处使用 $ 并且您需要决定是否要 $ 代表 jQuery 或原型。

于 2012-05-07T09:24:45.173 回答
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 回答