2011-02-25 53 views
1

我有这样将数据传递给封装在我的web应用程序的JavaScript代码

var data = { 
    getItem: function(key){ 
     ... 
    } 
} 

在我所有的脚本变量我可以用

data.getItem("Test"); 

但我怎么能在jquery plugins使用它?插件通常具有以下结构

(function($, window, document) { 
    //....plugin-code 
}); 

我该如何称这种结构?是否有可能在这些插件中使用我的全局数据变量?

+1

是,它应该是可能的(除非'data'标识符已经被通过在该插件的更局部变量/参数盖过)。 – 2011-02-25 13:29:03

回答

1

如果您的数据变量是全球性的,则是你可以在任何地方使用它,包括jQuery插件里面。

你需要确保数据在此之前,要使用任何自动执行功能的定义。

+0

“立即调用”而不是“自执行” – 2011-02-25 13:36:03

+0

@Sime有趣的技术点。谢谢。 欲了解更多信息,请访问: http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – 2011-02-25 13:43:06

1

其实他们往往有结构

(function($) { 
    // plugin-code 
})(jQuery); 

点在于

  1. 他们可以承担在此范围内$永远是jQuery的,不管别的加载定义$例如原型
  2. 一切都在这个封闭的内部定义,因此只有你选择暴露(由$.fn$.extend)什么是泄漏到外界

显然,如果它只是你在你的环境的插件,你可以假设你总是运行$ = jQuery,那么你不需要这些。 (你也有文档和窗口:我从来没有见过这些覆盖,我不知道你会通过文件和窗口本身作为参数传入什么)

你是否问过定义数据插件或从插件范围外拉入?对于你可以在里面写什么没有限制,所以如果你在里面定义和使用它,那么你的代码就会像befoer一样工作。如果您需要访问外部定义的数据,那么您需要以某种方式将其泄露出去,例如将访问器方法添加到$,document或window之一。

如果你在数据从插件范围以外的拉动,那么你仍然可以从您的瓶盖内访问全局变量,或者你可以在把它作为一个额外的参数 - 我不认为它会做任何区别。

相关问题