1. #1
    Ext JS Premium Member
    Join Date
    Dec 2007
    Posts
    61
    Vote Rating
    0
    Shyru is on a distinguished road

      0  

    Question Ext.base.borrow not working as with ExtJs 4.0.7?

    Ext.base.borrow not working as with ExtJs 4.0.7?


    We have an override for Ext.data.AbstractStore that adds plugin-support for Stores. To minimize needed changes between ExtJS updates I coded it with using borrow which borrows the plugin initialization logic from Ext.AbstractComponent like this:
    Code:
    /*
     * Add plugin support for stores.
     * This is done by borrowing some methods from Ext.AbstractComponent and modifying the constructor of Ext.data.AbstractStore
     */
    //borrow plugin methods from AbstractComponent
    Ext.data.AbstractStore.borrow(Ext.AbstractComponent,['plugins','constructPlugins','getPlugin','initPlugin','constructPlugin']);
    
    //add plugin initialisation code at the end of the constructor of Ext.data.AbstractStore:
    Ext.override(Ext.data.AbstractStore,{
    	constructor:Ext.Function.createSequence(Ext.data.AbstractStore.prototype.constructor,function(){
    		var i,len;
    		if (this.plugins)
    		{
    			console.log("Plugins are:",this.plugins);
    			this.plugins = [].concat(this.plugins);
    			this.constructPlugins();
    			for (i = 0, len = this.plugins.length; i < len; i++)
    			{
    				this.plugins[i] = this.initPlugin(this.plugins[i]);
    			}
    		}
    	})
    });
    In ExtJs 4.0.7 this was working fine, but with ExtJS 4.1Beta1 this bails out in constructPlugin() where plugin is null. I tried to debug it, but debugging borrowed methods is kinda fun. Perhaps its a scope problem. I noticed that Ext.Base.borrow changed a lot between 4.0.7 and 4.1Beta1. So either this introduced a bug or I'm doing something wrong.
    If needed I would be willing to provide a complete testcase.

  2. #2
    Sencha - Senior Forum Manager mitchellsimoens's Avatar
    Join Date
    Mar 2007
    Location
    Gainesville, FL
    Posts
    36,798
    Vote Rating
    834
    mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute mitchellsimoens has a reputation beyond repute

      0  

    Default


    So if you look at the prototype of Ext.data.AbstractStore, are the methods there?
    Mitchell Simoens @SenchaMitch
    Sencha Inc, Senior Forum Manager
    ________________
    Check out my GitHub, lots of nice things for Ext JS 4 and Sencha Touch 2
    https://github.com/mitchellsimoens

    Think my support is good? Get more personalized support via a support subscription. https://www.sencha.com/store/

    Need more help with your app? Hire Sencha Services services@sencha.com

    Want to learn Sencha Touch 2? Check out Sencha Touch in Action that is in print!

    When posting code, please use BBCode's CODE tags.

  3. #3
    Ext JS Premium Member
    Join Date
    Dec 2007
    Posts
    61
    Vote Rating
    0
    Shyru is on a distinguished road

      0  

    Default


    Yes, all methods are there. I just tried again with 4.1-Beta2. Should I report a Bug?

  4. #4
    Sencha User
    Join Date
    Nov 2008
    Location
    Lyon, France
    Posts
    215
    Vote Rating
    5
    christophe.geiser will become famous soon enough

      0  

    Default


    Yes, this is definitively a bug - and potentially a serious one if your app use borrowing methods. Only the last member will be applied/borrowed:

    Code:
    Ext.onReady(function(){
      Ext.define('C1', {
          name : 'c1',
          f1: function(){
            console.info('f1', this.name)
            this.f2()  
          },
          f2: function(){
              console.info('f2', this.name)
          }
      })  
    Ext.define('C2', {
        name : 'c2'
      }, function() {this.borrow(C1,['f1', 'f2'])})  
    
    
    c1 = new C1();
    c2 = new C2()
    
    
    c1.f1();
    c2.f1(); // only call f2
    
    
    })
    Fix : we should have a proper closure in base.borrow, or use Ext.Function.clone as in 4.1 :
    Code:
      if (typeof toBorrow == 'function') {
                        fn = function(b) {
                            return function() {b.apply(this, arguments)};
                        }(toBorrow);
    C.

  5. #5
    Sencha - Ext JS Dev Team evant's Avatar
    Join Date
    Apr 2007
    Location
    Sydney, Australia
    Posts
    16,833
    Vote Rating
    609
    evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute

      0  

    Default


    Are you saying there is a problem with the 4.2 beta? When I run the example code I see:

    f1 c1
    f2 c1
    f1 c2
    f2 c2
    Evan Trimboli
    Sencha Developer
    Twitter - @evantrimboli
    Don't be afraid of the source code!

  6. #6
    Sencha User
    Join Date
    Nov 2008
    Location
    Lyon, France
    Posts
    215
    Vote Rating
    5
    christophe.geiser will become famous soon enough

      0  

    Default


    Thanks for the answer, and oups...

    Downloaded what I thought to be the latest version from "ExtJS 4.1 beta 2 is available", first post in "ExtJs 4.2.0" Forum !

    Base.borrow looks fine in 4.2.0. Cant believe I tried to fix a 4.1 bug...
    Cheers
    C.

Turkiyenin en sevilen filmlerinin yer aldigi xnxx internet sitemiz olan ve porn sex tarzi bir site olan mobil porno izle sitemiz gercekten dillere destan bir durumda herkesin sevdigi bir site olarak tarihe gececege benziyor. Sitenin en belirgin ozelliklerinden birisi de Turkiyede gercekten kaliteli ve muntazam, duzenli porno izle siteleri olmamasidir. Bu yuzden iste. Ayrica en net goruntu kalitesine sahip adresinde yayinlanmaktadir. Mesela diğer sitelerimizden bahsedecek olursak, en iyi hd porno video arşivine sahip bir siteyiz. "The Best anal porn videos and slut anus, big asses movies set..." hd porno faketaxi