2010-06-18 10 views
1

Considérez le code suivant:Difficulté avec MooTools Class.extend

var Widget = new Class({ 
     Implements: [Options], 
     options: { 
      "name" : "BaseWidget" 
     }, 
     initialize: function(options) { 
      alert("Options are: " + JSON.stringify(options)); //alerts "Options are: undefined" 
      this.setOptions(options); 
      alert("My options are: " + JSON.stringify(this.options)); //alerts "My options are: { 'name' : 'BaseWidget' }" 
     }, 
     getName: function() { 
      return this.options.name; 
     } 
}); 

var LayoutWidget = Widget.extend({  
     initialize: function() { 
      this.parent({ "name" : "Layout" }); 
     } 
}); 

alert(new LayoutWidget().getName()); //alerts "BaseWidget" 

J'éprouve des difficultés à déterminer pourquoi l'argument passé dans la fonction « this.parent() » appel à « initialize » de LayoutWidget vient à travers comme "indéfini" dans la fonction initialize de Widget. J'utilise MooTools 1.2.2. Est-ce que quelqu'un pourrait me pointer dans la bonne direction?

Répondre

2

vérifier: http://www.jsfiddle.net/F4hTS/

légère différence dans la forme.

var Widget = new Class({ 
    Implements: [Options], 
    options: { 
     "name" : "BaseWidget" 
    }, 
    initialize: function(options) { 
     alert("Options are: " + JSON.stringify(options)); //alerts "Options are: undefined" 
     this.setOptions(options); 
     alert("My options are: " + JSON.stringify(this.options)); //alerts "My options are: { 'name' : 'BaseWidget' }" 
    }, 
    getName: function() { 
     return this.options.name; 
    } 
}); 

Widget.LayoutWidget = new Class({ 
    Extends: Widget, 
    initialize: function(options) { 
     this.parent(options); 
    } 
}); 

alert(new Widget.LayoutWidget({ "name" : "Layout" }).getName()); //alerts "Layout" 
+0

intéressant, tous les exemples que j'ai vus ont utilisé Class.extend(). cela fonctionne bien, merci –