php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.06.2009, 13:59  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Erledigt] Crockfords Functional Pattern #fail

Hallo zusammen,

ich bin bei der Umsetzung einer TabView auf ein Problem gestoßen.
Um mir in JavaScript ein Objekt zu ziehen benutze ich, seitdem ich D. Crockfords Buch gelesen habe, folgendes Pattern:
PHP-Code:
var MyConstructor = function (options) {
    
// private members
    
var that = {},
        
name = (typeof options === 'undefined' ' ' options.name);

    
// private method
    
getFoo = function () {
        return 
'bar';
    };

    
// public method calls private method
    
that.getFooBar = function () {
        return 
getFoo();
    };
    
    
// public method calls private member
    
that.getName = function () {
        return 
name;
    };

    
// expose
    
return that;
}

// get an instance
var myObject MyConstructor({'name''alex'});

console.log(myObject.getFooBar()); // 'bar'
console.log(myObject.getName()); // alex
// console.log(myObject.getFoo()); // myObject.getFoo is not a function 
Wie man sieht, ist der new Operator nicht mehr nötig, da die Funktion selbst ein Objekt zurück gibt.
Es wird auch immer eine neue Instanz des Rückgabeobjekts erzeugt, was sich leicht prüfen lässt:
PHP-Code:
// get an instance
var myObject MyConstructor({'name''alex'});

console.log(myObject.getFooBar()); // 'bar'
console.log(myObject.getName()); // alex
// console.log(myObject.getFoo()); // myObject.getFoo is not a function

// get an instance
var myObject2 MyConstructor();
console.log(myObject2.getFooBar()); // 'bar'
console.log(myObject2.getName()); // ' ' 
Soweit alles logisch. Mein Problem ist nun aber folgendes:
Sobald ich mir eine zweites Objekt meiner TabView ziehe funktioniert die erste nicht mehr.
Da der Quellcode etwas umfangreicher ist habe ich mal alles online gestellt:
1 TabView Instanz - funktioniert (Tabs sind unten links)
Zweite TabView Instanz - funktioniert nicht mehr (js:fail.js)

Ich sitze nun schon eine ganze Weile an dieser Sache und finde meinen (Denk-) Fehler einfach nicht.
Semikolons sind alle peinlich genau gesetzt, damit JavaScript nicht fälschlicherweise irgendwo eines einfügt.

Wie man im Beispiel sehen kann Funktioniert APF.Widget.Tab problemlos ...
Ich vermute momentan, dass es an den jQuery Instanzen liegt.
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.06.2009, 21:38  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OK großer #fail von mir:
Ich habe ein paar Patterns durcheinander gebracht und beim o.g. folgenden Fehler gemacht.
Die privaten Methoden müssen an eine private Eigenschaft (also ein Objekt) gehängt werden, da sie sonnst im global scope landen.
In meinem Fall haben sich die privaten Methoden von APF.Widget.Tab überschrieben (da sie ja global waren).
Richtig wäre das o.g. Beispiel also folgendermaßen:
PHP-Code:
var MyConstructor = function (options) {
    
// private members
    
var that = {},
        
name = (typeof options === 'undefined' ' ' options.name),
        
my = {};

    
// private method
    
my.getFoo = function () {
        return 
'bar';
    };

    
// public method calls private method
    
that.getFooBar = function () {
        return 
my.getFoo();
    };
    
    
// public method calls private member
    
that.getName = function () {
        return 
name;
    };

    
// expose
    
return that;
}

// get an instance
var myObject MyConstructor({'name''alex'});

console.log(myObject.getFooBar()); // 'bar'
console.log(myObject.getName()); // alex
// console.log(myObject.getFoo()); // myObject.getFoo is not a function 
(man beachte das 'my')
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] preg_match und die Pattern Spoiler PHP Tipps 2009 9 13.02.2009 08:29
Design Pattern Harry B. Software-Design 7 02.09.2008 20:49
Probleme mit Pattern bei Templateersetzung RudiS PHP-Fortgeschrittene 2 19.02.2005 22:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
crockford on extjs, crockford template function?, \functional pattern\, functional pattern, fbar extjs getfootbar, php functional, php var pattern

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum