拥有不同的javascript文件共享相同的功能

时间:2011-11-17 05:43:37

标签: javascript jquery jquery-deferred

现在我正在为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 :(得分:0)

你只有向后的“未定义”逻辑。你应该说typeof myObject.jq === 'undefined'。虽然,由于预期jq是一个函数,因此更好的检查将是typeof myObject.jq !== 'function'

答案 1 :(得分:0)

首先要开始工作,您需要将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)}