0

我使用 jquery v1.8 作为我的模板,我使用的是 Mura 6.1 版,当我尝试加载任何页面时出现上述错误,它发生在这一行$.extend(window,mura);

显而易见的事情是$它无法使用,但我不知道我应该怎么做才能防止这种情况发生,因为这段代码是由 mura 在每个页面中动态添加到脚本标签中的,而不是我的某个库文件可以在 jQuery 之后通过加载来调整。

详细代码如下includes/display_objects/html_head/global.cfm

var mura={
loginURL:"#variables.loginURL#",
siteid:"#variables.$.event('siteID')#", 
siteID:"#variables.$.event('siteID')#", 
context:"#variables.$.globalConfig('context')#", 
jslib:"#variables.$.getJsLib()#",
assetpath:"#variables.$.siteConfig('assetPath')#",
themepath:"#variables.$.siteConfig('themeAssetPath')#",
htmlEditorType:"#variables.$.globalConfig('htmlEditorType')#",
rb:"#lcase(listFirst(variables.$.siteConfig('JavaLocale'),"_"))#",
#variables.$.siteConfig('JSDateKeyObjInc')#
}
$.extend(window,mura);

我不希望进行任何更改,例如$用 jQuery 替换,因为如果自定义 mura 核心文件并且升级时不会保留更改。我尝试替换$jQuery并且它有效但是有没有办法我可以通过自定义我的模板文件或自定义 js 文件来避免 jQuery 冲突所以我不必担心如果我升级 Mura 并且这些核心文件会发生什么覆盖。

4

2 回答 2

0

尝试在您的 jQuery 代码周围使用立即调用函数表达式 (IIFE),如下所示,这将需要在您使用 jQuery 的任何地方完成,但它会确保没有冲突:

var $ ='blah'; // assign $ to something other than jQuery, like in your enviroment
try{
  alert( $('#test').val() ); // this would break as 'blah' doesnt have a .val() function
  }
catch(err){
  alert('$ is not jQuery in this scope');
  }

(function($) {
   // inside this scope $ will allways be jQuery, even if $ is something else out in the wild
   alert( $('#test').val()+'\n\n This works because $ is protected in this scope' );
    
})(jQuery); //pass jQuery in as the parameter of this IIFE 

// see http://stackoverflow.com/questions/11403266/understanding-vs-jquery-in-iife-instead-of
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="test" value="working"/>

于 2015-03-22T18:25:32.947 回答
0

当开发人员尝试<head>在文档部分以外的地方(例如,在结束</body>标记之前)引用 jquery.js 时,我已经看到这种情况发生。因此,请确保您在<head>文档部分中加载了 jQuery。是的, Mura 将在结束标记之前添加其 JS </head>,但只要您对 jquery.js 的引用存在,您就不应该遇到此问题。

如果这不是问题,那么我有兴趣查看发生这种情况的链接,或者至少是发生这种情况的页面的完全呈现的 html。

于 2015-03-23T02:07:40.407 回答