Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Fixes getter methods created when plugins are initialized. #20

Merged
merged 1 commit into from

2 participants

Jason Daly Alex Gorbatchev
Jason Daly

Because the following function definition is not wrapped in a closure

self[name] = function() { return plugin; };

plugin's scope is the TextExt.initPlugins function. Because of this,
on each iteration of the list of plugins to create the getter methods in
TextExt, the return value of all created methods will be the last
value of plugin and not the value of plugin from when the function
was defined for each.

Wrapping the function definition in a closure fixes this issue.

As an explicit example:

Previously, when instantiating a new textext(...) instance and
defining the plugins option as

plugins: 'autocomplete arrow'

All 3 of the following would return the TextExtArrow instance

$('...').textext()[0].ie9();
$('...').textext()[0].autocomplete();
$('...').textext()[0].arrow();

After they closure from this changeset is applied, they return their
expected plugin instances

 $('...').textext()[0].ie9();          // TextExtIE9Patches
 $('...').textext()[0].autocomplete(); // TextExtAutocomplete
 $('...').textext()[0].arrow();        // TextExtArrow
Jason Daly deefour Fixes getter methods created when plugins are initialized.
Because the following function definition is not wrapped in a closure

    self[name] = function() { return plugin; };

`plugin`'s scope is the `TextExt.initPlugins` function. Because of this,
on each iteration of the list of plugins to create the getter methods in
`TextExt`, the return value of all created methods will be the last
value of `plugin` and not the value of `plugin` from when the function
was defined for each.

Wrapping the function definition in a closure fixes this issue.

As an explicit example:

Previously, when instantiating a new `textext(...)` instance and
defining the `plugins` option as

    plugins: 'autocomplete arrow'

All 3 of the following would return the `TextExtArrow` instance

    $('...').textext()[0].ie9();
    $('...').textext()[0].autocomplete();
    $('...').textext()[0].arrow();

After they closure from this changeset is applied, they return their
expected plugin instances

     $('...').textext()[0].ie9();          // TextExtIE9Patches
     $('...').textext()[0].autocomplete(); // TextExtAutocomplete
     $('...').textext()[0].arrow();        // TextExtArrow
0a805ee
Alex Gorbatchev alexgorbatchev merged commit f7b74dd into from
Alex Gorbatchev

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Feb 7, 2012
  1. Jason Daly

    Fixes getter methods created when plugins are initialized.

    deefour authored
    Because the following function definition is not wrapped in a closure
    
        self[name] = function() { return plugin; };
    
    `plugin`'s scope is the `TextExt.initPlugins` function. Because of this,
    on each iteration of the list of plugins to create the getter methods in
    `TextExt`, the return value of all created methods will be the last
    value of `plugin` and not the value of `plugin` from when the function
    was defined for each.
    
    Wrapping the function definition in a closure fixes this issue.
    
    As an explicit example:
    
    Previously, when instantiating a new `textext(...)` instance and
    defining the `plugins` option as
    
        plugins: 'autocomplete arrow'
    
    All 3 of the following would return the `TextExtArrow` instance
    
        $('...').textext()[0].ie9();
        $('...').textext()[0].autocomplete();
        $('...').textext()[0].arrow();
    
    After they closure from this changeset is applied, they return their
    expected plugin instances
    
         $('...').textext()[0].ie9();          // TextExtIE9Patches
         $('...').textext()[0].autocomplete(); // TextExtAutocomplete
         $('...').textext()[0].arrow();        // TextExtArrow
This page is out of date. Refresh to see the latest.
Showing with 3 additions and 1 deletion.
  1. +3 −1 src/js/textext.core.js
4 src/js/textext.core.js
View
@@ -802,7 +802,9 @@
if(plugin)
{
self._plugins[name] = plugin = new plugin();
- self[name] = function() { return plugin; };
+ self[name] = (function(plugin) {
+ return function(){ return plugin; }
+ })(plugin);
initList.push(plugin);
$.extend(true, plugin, self.opts(OPT_EXT + '.*'), self.opts(OPT_EXT + '.' + name));
}
Something went wrong with that request. Please try again.