$.extend не является функцией
Я пытаюсь интегрировать редактор редактирования SVG, который использует jQuery, в Magento. Проблема в том, что Magento использует Prototype, и поэтому я использую jQuery.noConflict();
метод. Все нормально, пока, если я вызову редактор через функцию, Firebug выдаст следующие ошибки:
$.extend не является функцией
if(config) {
$.extend(curConfig, config);
}
$.isArray не является функцией
} else if($.isArray(key)) {
Ошибка возникает в строках 59 и 121 в файле svgcanvas.js. Я надеюсь, что кто-то с большим опытом использования jquery и прототипа может помочь мне с этой проблемой.
4 ответа
Попробуйте поставить вашу функцию 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 );
Пытаться
var k = jQuery.noConflict();
тогда ваш звонок использует k вместо $.
Вы изменили пространство имен jQuery с помощью noConflict. Кажется, вы все еще используете $ для вызова функции. Измените пространство имен Jquery, используя подход noConflict, на что-то вроде $$ или, возможно, jQ, затем вызовите ваш метод, например, jQ.extend вместо $.extend.