如何从jquery插件访问应用程序对象

时间:2011-02-26 16:52:18

标签: jquery

在我们的应用程序中,我们正在缓存一些常用数据。最近我们为我们的网络应用程序开发了一个jquery插件。一些插件方法需要访问应用程序缓存。 我试图访问缓存,结果是未定义的。

例如:

申请类

Application(){
cachedObjects = {};
}

<body>
$(function(){
Application();
});

插件:

(function( $ ){

var methods = {
initialize : function( options ) { },
getDataFromCache : function() { 
var data = Application.cachedObjects.someObject;// Here, data is undefined.
 }
};

 $.fn.menuPlugin = function( method ) {
 if ( methods[method] ) {
  return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
 } else if ( typeof method === 'object' || ! method ) {
  return methods.initialize.apply( this, arguments );
} else {
}    

};
})( jQuery );

如何访问这些应用程序对象?

任何建议都会令人感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

这里有很多问题。首先,您定义一个没有function关键字的函数。其次,您在没有cachedObjects关键字的情况下声明var,因此它变为全局关键字。我想你的意思是

function Application(){
    var cachedObjects = {};
}

在任何情况下cachedObjects只会是Application内的局部变量,而不是Application对象的属性(恰好是函数)。

您可以使用

以更简单的方式声明Application对象
var Application = {
    cachedObjects: {}
};

在任何情况下,如果您正在开发jQuery插件,则不应创建全局变量Application;您可以使用插件的本地变量,如

(function($) {// All the definition of your plugin goes in this function
    var Application = ...
})(jQuery);

或将缓存的数据存储在闭包中。