2011-08-23 60 views
2

我正在嘗試將使用jQuery的svg edit - editor整合到Magento中。問題是Magento使用Prototype,因此我使用jQuery.noConflict();方法。一切都很好,直到如果我通過功能調用編輯器,然後螢火蟲拋出以下錯誤:

$ .extend不是一個函數

if(config) { 
    $.extend(curConfig, config); 
} 

$ .isArray是不是一個函數

} else if($.isArray(key)) { 

錯誤發生在線59121svgcanvas.js。我希望有更多使用jquery和prototype的經驗的人可以幫助我解決這個問題。

+1

的問題是(據我可以請參閱[源代碼](http://code.google.com/p/svg-edit/source/browse/trunk/editor/svg-editor.js)),編輯器直接訪問** global * *'$'(而不是別名全局'jQuery')。只調用'jQuery.noConflict();'在這裏沒有幫助,似乎你必須調整源代碼。 –

回答

4

嘗試:jQuery.extend(curConfig, config);

+0

謝謝大家快速回復,全部替換後** $。*。* *使用** jQuery **和** $(**使用** jQuery **(**錯誤消失了,我真的不想這樣做,但在我看來,這是最簡單和最快速的方式4000行代碼。THX! – tecmec

4

嘗試

var k = jQuery.noConflict(); 

那麼你的呼叫使用ķ,而不是$

5

儘量把你的函數ATTR到

(function($){ 


})(jQuery); 

所以它看起來像

(function($){ 
jQuery.fn.attr = function(key, value) { 
    var len = this.length; 
    if(!len) return this; 
    for(var i=0; i<len; i++) { 
     var elem = this[i]; 
     // set/get SVG attribute 
     if(elem.namespaceURI === svgns) { 
      // Setting attribute 
      if(value !== undefined) { 
       elem.setAttribute(key, value); 
      } else if($.isArray(key)) { 
       // Getting attributes from array 
       var j = key.length, obj = {}; 

       while(j--) { 
        var aname = key[j]; 
        var attr = elem.getAttribute(aname); 
        // This returns a number when appropriate 
        if(attr || attr === "0") { 
         attr = isNaN(attr)?attr:attr-0; 
        } 
        obj[aname] = attr; 
       } 
       return obj; 

      } else if(typeof key === "object") { 
       // Setting attributes form object 
       for(var v in key) { 
        elem.setAttribute(v, key[v]); 
       } 
      // Getting attribute 
      } else { 
       var attr = elem.getAttribute(key); 
       if(attr || attr === "0") { 
        attr = isNaN(attr)?attr:attr-0; 
       } 

       return attr; 
      } 
     } else { 
      return proxied.apply(this, arguments); 
     } 
    } 
    return this; 
}; 


})(jQuery); 
+0

$將從原型中被盜取:(他面臨經典原型和jQuery衝突 –

+0

@Anton S:No ... $將被限制在匿名函數範圍內,並且它會通過jQuery對象...什麼是創世紀 –

+0

@AntonS:正如丹尼爾說的那樣,它會工作 – genesis

1

是否更改了jQuery的命名空間noConflict。你似乎仍然使用$來調用func。使用noConflict方法類似$$或許JQ然後調用你的方法一樣jQ.extend而不是$ .extend更改Jquery的命名空間..