Javascript 我的jquery插件和访问全局查询似乎不合适。更好的方法?
我问了之前的一个问题,我觉得我不够简洁。下面是我的代码示例和对全局函数的访问。我觉得这是一个糟糕的形式,但鉴于我的插件格式,我找不到另一种方法来实现这一点 我相信我可以将我的函数应用到一个方法var,然后通过调用中的插件来实例化它,但到目前为止,我的插件并不是这样设置的,我认为这可能需要更多的工作。但我想听听更有经验的jQuery插件创建者的意见 用法: 数据是前置的。随着动态内容的创建。我收集了一些与此相关的信息,将其打包,发送一个ajax调用,然后更新视图。事情是这样的。我的插件可以在一个页面上被多次调用。但问题是,在调用插件之前,我需要获取一些数据对象,这样我就可以对它们进行操作,并确定“我需要更新什么”。这就是我的问题。我需要从插件外部获取一些数据。然后我需要把它传过来。这是否被认为是“适当的” 我的希望是我可以将数据导入插件的方法中,然后当我调用它时,我就有了数据来进行一些显示选择Javascript 我的jquery插件和访问全局查询似乎不合适。更好的方法?,javascript,jquery,Javascript,Jquery,我问了之前的一个问题,我觉得我不够简洁。下面是我的代码示例和对全局函数的访问。我觉得这是一个糟糕的形式,但鉴于我的插件格式,我找不到另一种方法来实现这一点 我相信我可以将我的函数应用到一个方法var,然后通过调用中的插件来实例化它,但到目前为止,我的插件并不是这样设置的,我认为这可能需要更多的工作。但我想听听更有经验的jQuery插件创建者的意见 用法: 数据是前置的。随着动态内容的创建。我收集了一些与此相关的信息,将其打包,发送一个ajax调用,然后更新视图。事情是这样的。我的插件可以在一个页
if ( typeof Object.create !== 'function' ) {
Object.create = function( obj ) {
function F() {};
F.prototype = obj;
return new F();
};
}
// this is the global that I push each reiteration of data into.
var perLineDataArray = [];
(function( $, window, document, undefined ) {
var Sustainability = {
_init: function( options, elem ) {
var self = this;
self.elem = elem;
self.$elem = $( elem );
/* plugin call has all the data I need, I pass it in here */
self.perLineData = groupedperLineData;
self.url = 'path_to_url/sustainability';
self.options = $.extend( {}, $.fn.querysustainability.options, options );
self._extractUrlData();
self._cleanup();
},
_extractUrlData: function(){
// this is where I would go thru each of the data objects and
// determine WHAT in the view needs updating based on some critera.
},
_getsustain: function()
{
var self = this;
$.ajax({
// my ajax call data
success: function(data){
this._buildUpdate(data);
}
});
},
_buildDispaly: function( results ) {
var self = this;
self.sustainability = $.map( results, function( obj, i) {
return $( self.options.wrapDisplay ).append ( obj.text )[0];
});
},
_cleanup: function(){
// clean out global array for next funneling of grouped up data
perLineDataArray = [];
},
_showMessage: function() {
var self = this;
self.$elem[ self.options.transition ]( 500, function() {
$(this).html( self.sustainability )[ self.options.transition ]( 500 );
});
},
};
$.fn.querysustainability = function( options, method ) {
return this.each(function() {
var sustainability = Object.create( sustainability );
sustainability._init( options, this );
$.data( this, 'querysustainability', sustainability );
});
};
$.fn.querysustainability.options = {
display: '<span></span>',
usedClass : 'uniqueclass',
transition: 'fadeToggle'
};
})( jQuery, window, document );
然后,当显示是构建的,我有了我需要的所有对象时,我调用插件
jQuery('#planets').querysustainability({
groupedperLineData: perLineDataArray
});
或者我可以在这里添加全局变量:
$.fn.querysustainability.options = {
display: '<span></span>',
usedClass : 'uniqueclass',
transition: 'fadeToggle',
groupedperLineData: perLineDataArray
};
$.fn.querysustainability.options={
显示:“”,
usedClass:“uniqueclass”,
过渡:“fadeToggle”,
groupedperLineData:perLineDataArray
};
我的直觉告诉我,我想让插件封装所有东西,但我的另一部分感觉我需要传递我需要操作的东西,现在让插件检索它
那么,有没有一种方法可以调用插件的一个子方法,存储数据集,然后当我调用插件时,它是否已经准备好了数据
你的想法?如果您觉得我应该如何解决这个问题,代码方面?好的,正如前面在评论中提到的,下面是我最基本的jQuery插件布局模板。通过它,你可以设计出几乎任何你想要的jQuery插件,并且拥有大量的通用性。这是不言自明的。只要看一看,如果它有帮助,很好,如果不让我知道,我会删除它作为一个答案
/* Example Plug-in Setup */
(function($) {
if (!$.myExample) { // your plugin namespace
$.extend({
myExample: function(elm, command, args) {
return elm.each(function(index){
// do work to each element as its passed through
// be sure to use something like
// return elm.each(function(e) { dor work });
// as your final statement in order to maintain "chainability"
});
}
});
$.fn.extend({
myExample: function(command) {
return $.myExample($(this), command, Array.prototype.slice.call(arguments, 1));
}
});
$.myExample.props = {
key1: "value",
key2: "value"
};
$.myExample.methods = {
key1: function(param) {
},
key2: function(param) {
}
};
$.myExample.init = function(param) {
var key = "value",
key2 = {
subKey: "value"
};
/*
/ run any number of initializing functions here
/ I prefer to make my param a value that can be a
/ string with a possible object
/ the string for holding a base configuration
/ the object for any change in properties or base values for that config
*/
};
$.myExample.defaults = {
key1: "value",
key2: {
prop1: {
subKey1: "value",
subKey2: "value"
},
prop2: {
subKey1: "value"
}
},
key3: function(param) {
}
};
}
})(jQuery);
Mu建议在“使用”插件之前,而不是在调用插件之前,在“init”函数中创建必须调用的函数,但我还没有完全阅读您的工作。但这只是我的第一个想法。这可能是我能做的——但我该怎么做呢?唯一的方法是创建一个“方法”变量,然后实例化它们吗?我已经看到了这些问题的答案。。但好奇的是,我的实现是否能让它工作,或者使用一个global是否可以?只是一个建议,globals几乎从来都不好,因为插件需要自我维持。换句话说,我需要能够在任何平台上与jQuery一起使用它。我建议将数组添加到插件的名称空间中,或者甚至可以考虑使用jQuery的.data()功能。我有一个基本的插件布局,我会尝试在tommorow找到它,然后为你发布,或者通过电子邮件发送给你或者其他什么。它基本上是一个模板,您只需将其用作插件的布局方案。这真的很容易理解,我已经一遍又一遍地使用它为公司制作了几十个插件。哦,如果你可以的话,那就太好了。真的很感谢。嘿,世爵-我做了一些研究,我想我了解你对数据的使用,你认为这合适吗?我可以将一些dataObj绑定到我的每个元素上。然后,当我调用插件时,我可以收集所有的数据属性,运行这些数据并做出一些选择。。但我想看看你有什么样的模板插件,因为我猜我的是有点不正常。
/* Example Plug-in Setup */
(function($) {
if (!$.myExample) { // your plugin namespace
$.extend({
myExample: function(elm, command, args) {
return elm.each(function(index){
// do work to each element as its passed through
// be sure to use something like
// return elm.each(function(e) { dor work });
// as your final statement in order to maintain "chainability"
});
}
});
$.fn.extend({
myExample: function(command) {
return $.myExample($(this), command, Array.prototype.slice.call(arguments, 1));
}
});
$.myExample.props = {
key1: "value",
key2: "value"
};
$.myExample.methods = {
key1: function(param) {
},
key2: function(param) {
}
};
$.myExample.init = function(param) {
var key = "value",
key2 = {
subKey: "value"
};
/*
/ run any number of initializing functions here
/ I prefer to make my param a value that can be a
/ string with a possible object
/ the string for holding a base configuration
/ the object for any change in properties or base values for that config
*/
};
$.myExample.defaults = {
key1: "value",
key2: {
prop1: {
subKey1: "value",
subKey2: "value"
},
prop2: {
subKey1: "value"
}
},
key3: function(param) {
}
};
}
})(jQuery);