You could consider modifying your plugin to follow the jQuery UI
Widget format. This takes advantage of the widget factory, which
provides ways to access the methods and properties in 2 ways:
1) Through the element the plugin is applied to, eg:
$("#myElement").smartList("selectedValue")
2) Or by getting an 'instance' of the widget, eg:
var myList = $("#myElement").data("smartList");
var val = myList.getSelectedValue();
If you don't want to go this route, then you need to return an
'instance object' instead of a jQuery object. This means your plugin
is not 'chainable' - ie, it must be the last method called on the
object.
To return an instance, create an object with pointers to your public
properties and methods...
return {
options: options // property
, getSelectedValue: getSelectedValue // method
, insetItem: internalMethodName
}
There are a few ideas to get you started.
/Kevin
On Jan 4, 5:08 am, mehdi <[email protected]> wrote:
> Hi,
> I've just developed a plugin that mimics the combo box control, albeit
> it's a special one. That's being defined as follows:
>
> (function($) {
> $.fn.extend({
> smartList: function(settings) {
> //prepare settings, blah blah blah...
>
> return this.each(function() {
> //whatever code goes here...
> });
> }
> });
>
> })(jQuery);
>
> You know, to use this plugin, I could easily write the following
> JavaScript code:
>
> var $myList = $('myElement').smartList();
>
> No problem so far. Now, I need to define and access some functions
> that's specific to the smartList. say, e.g., getSelectedValue,
> insertItem, and the like. The problem is that I've got no idea how to
> address such a thing in JavaScript. i.e., I need to write things like:
>
> $myList.getSelectedValue();
> $myList.insetItem('foo', 'bar');
>
> But this isn't possible, since the $myList variable is a jQuery
> object.
>
> So I just defined some functions, say, $.smartList.getSelectedValue
> and the like... but in this approach, I've to pass the jQuery object
> to this functions as a mandatory parameter and this really sucks.
> i.e., I need to get the selected value of $myList this way:
>
> var value = $.smartList.getSelectedValue($myList);
>
> Is there any better approach to address such a thing?
>
> Any help would be highly appreciated,
>
> TIA,
> Mehdi