$ .extend не является функцией - PullRequest
3 голосов
/ 23 августа 2011

Я пытаюсь интегрировать редактор редактирования svg , который использует jQuery, в Magento.Проблема в том, что Magento использует Prototype, и поэтому я использую метод jQuery.noConflict();.Все нормально, пока, если я вызову редактор через функцию, Firebug выдаст следующие ошибки:

$. Расширение не является функцией

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

$.isArray не является функцией

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

Ошибка возникает в строке 59 и 121 в svgcanvas.js .Я надеюсь, что кто-то с большим опытом использования jquery и прототипа может помочь мне с этой проблемой.

Ответы [ 4 ]

5 голосов
/ 23 августа 2011

попытайтесь поместить вашу функцию 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 );
4 голосов
/ 23 августа 2011

Попробуйте: jQuery.extend(curConfig, config);

4 голосов
/ 23 августа 2011

попытайтесь

var k = jQuery.noConflict();

, тогда ваш звонок использует k вместо $ .

1 голос
/ 23 августа 2011

вы изменили пространство имен jQuery с помощью noConflict. Вы, похоже, все еще используете $ для вызова функции. Измените пространство имен Jquery, используя подход noConflict, на что-то вроде $$ или, возможно, jQ, затем вызовите ваш метод, например, jQ.extend вместо $ .extend ..

...