Наличие разных файлов JavaScript имеет одну и ту же функцию - PullRequest
0 голосов
/ 17 ноября 2011

Сейчас я создаю несколько плагинов для WordPress. Все должны работать отдельно, но я хочу добавить реализацию, чтобы они работали вместе.

Для начала, весь скрипт будет использовать собственное имя для ссылки на jQuery, это первая часть, с которой начинается моя проблема. В WordPress у меня есть комбинированный объект, который я хочу заполнить всеми значениями. Объединенный объект называется: myObject.

Теперь я пытаюсь это, но это не работает:

if( typeof myObject.jq !== 'undefined' )
    myObject.jq = jQuery.noConflict();

myObject.jq(document).ready(function(){

}

Я получаю сообщение об ошибке 'myObject.jq' не является функцией.

Я хочу еще больше расширить это с помощью комбинированной функции AJAX, как это

if( typeof myObject.jq !== 'undefined' ){
    myObject.jq = jQuery.noConflict();

    myObject.ajaxcall = function(action){
        var dfr = myObject.jq.Deferred();
        myObject.jq.ajax({
            url:myObject.ajaxurl,
            type:'post',
            data:{
                action:action,
                face:myObject.face
            },
            dataType:'json',
            success:dfr.resolve
        });
        return dfr.promise();
    };
}

myObject.jq(document).ready(function(){
    // My code here
}

Это полностью не работает. У кого-нибудь есть идеи, как мне заставить это работать?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

Чтобы ваша первая часть работала, вам нужно объявить myObject как object. А javaScript автоматически назначит неопределенные идентификаторы объектов, поэтому вам не нужно проверять, существует ли ключ. Поэтому измените свой код на следующий, будет работать:

var myObject = {};
myObject.jq = jQuery.noConflict();
myObject.ajaxcall = function(action) {
 //You function code
};

myObject.jq(document).ready(function(){
  //Your code goes here
});

Это приведет к следующему myObject

myObject
  ajaxcall: function (action) { }
  jq: function (a,b){return new d.fn.init(a,b,g)}
0 голосов
/ 17 ноября 2011

У вас просто «неопределенная» логика в обратном направлении.Вы должны сказать typeof myObject.jq === 'undefined'.Хотя, как ожидается, jq будет функцией, лучшим вариантом будет typeof myObject.jq !== 'function'.

...