Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 11.06.2009, 16:38 Nach oben    #1
khz
Neuer Benutzer
 
Registriert seit: 11.06.2009
Beiträge: 2
Standard Javascript Bibliothek

Hallo liebe Community,
ich bastel gerade an einer kleinen Javascript Bibliothek. Allerdings weiß ich nicht so recht, ob das ein guter Ansatz ist oder nicht. Die Bibliothek soll erweiterbar sein.

Ich habe folgende Objekte:

  • NameSpace.Core
    {
    initialize(selector): nimmt ein DOM Element mit der übergebenen ID und initialisiert eine NameSpace.Elements Instanz, in der später alle zugreifbaren Funktionen bereitgestellt werden;
    each(scope, fn): führt eine Funktion auf alle gespeicherten Elemente in einer NameSpace.Elements Instanz durch;
    extend(name, fn): prototypt das NameSpace.Elements Objekt mit einer Funktion;
    attach(obj): überprüft ob alle Abhängigkeiten bestehen und übergibt die publicMethods eines Plugins der extend Funktion, um Funktionen bereitzustellen;
    }
  • NameSpace.Elements
    {
    elements: hier werden alle DOM Elemente gespeichert;
    each(fn): stellt die each Funktion des Core Objektes im Element Set zur Verfügung;
    first(): reduziert das Element Set bis auf das erste Element;
    last(): reduziert das Element Set bis auf das letzte Element;
    size(): gibt die Anzahl der aktuellen DOM Elemente zurück;
    }
  • NameSpace.Plugin
    {
    publicMethods: alle Funktionen, die später dem Element Set zur Verfügung gestellt werden sollen, werden in diesem Array angegeben;
    dependencies: hier werden alle Abhängigkeiten für das Plugin angegeben;
    methodX(): Methode X;
    methodY(): Methode Y;
    methodZ(): Methode Z;
    }


und zum Schluss habe ich ein $-ShortCut, der NameSpace.Core.initialize(selector) aufruft und das Element Set zurückgibt.

Würde ich im NameSpace.Plugin.publicMethods Array methodX angeben, könnte man so darauf zugreifen:

Code:
$('ID').methodX();
Die Methoden sind alle verkettbar, da sie alle die Instanz des Element Sets zurückgeben. Allerdings habe ich eine Unschönheit entdeckt.

Zum Beispiel folgendes Plugin:

Code:
NameSpace.CSS = {
    publicMethods: ['css'],
    dependencies: null,
    css: function() {
        var arg = {};
        if(arguments.length == 2) arg[arguments[0]] = arguments[1];
        else if(typeof arguments[0] == 'object') arg = arguments[0];
        else return NameSpace['CSS'].getStyle(arguments[0]);
        this.each(NameSpace['CSS'].setStyle, arg); //this bezieht sich hier nicht auf das NameSpace.CSS Objekt, da es später per prototype in das Element Set Objekt hinzugefügt wird; Eclipse gibt mir deshalb ein Fehler aus;
        return this;
    },
    getStyle: function(prop) {
        alert(this.publicMethods); //this bezieht sich hier auf das NameSpace.CSS Objekt
    },
    setStyle: function(e, arg) {
                alert(this.selector); //this bezieht sich hier wieder auf das Element Set Object, da ich bei der each Funktion, die übergebene Funktion per fn.call(this, scope.elements[i], arguments[1]) aufrufe;
        for(var prop in arg) {
            e.style[prop] = arg[prop];
        }
    }
};
Das bedrückt mich ein bisschen. Wie findet ihr überhaupt den Aufbau der Bibliothek ? Und denkt ihr das "this"-Problem lässt sich irgendwie beheben oder ist das eigentlich nicht weiter schlimm ?

Mit freundlichen Grüßen,
kiloHertz
khz ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2009, 17:51 Nach oben    #2
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 695
Standard

Also erstmal vorneweg: welchen Zweck soll dieses Framework erfüllen? Dass es einen einfachen DOM-Selektor hat und über Plugins mit Elementen bestimmte Aktionen ausgeführt werden können.
Aber welchen Grund hat es, dass du ein solches Framework schreiben willst? Zu Lernzwecken? Um schlanker und schneller oder individueller zu sein als andere Frameworks?

Zu dem this-Problem: guck dir mal die bind-Funktion des Prototype Frameworks an.
javascript Code:
  1. Function.prototype.bind = function() {
  2.   var __method = this, args = $A(arguments), object = args.shift();
  3.   return function() {
  4.     return __method.apply(object, args.concat($A(arguments)));
  5.   }
  6. }
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2009, 18:01 Nach oben    #3
khz
Neuer Benutzer
 
Registriert seit: 11.06.2009
Beiträge: 2
Standard

Ich will mich überhaupt nicht mit anderen Frameworks messen. Eher möchte ich für mich selber etwas Javascript entdecken und die Bibliothek meinen Bedürfnissen anpassen. ;)

Noch was: würde this auf das entsprechende NameSpace.Plugin Objekt zeigen, dann könnte ich aber die Funktionen, die im Element Set Object bereitstehen, nicht verwenden, oder ?
khz ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JavaScript Literaturempfehlung? Sekundentakt Gesuche 13 17.01.2009 19:05
qooxdoo in Eclipse einbinden don_pazo Eclipse 0 08.01.2009 10:41
Barrierefreies JavaScript Ben JavaScript und AJAX 3 15.12.2008 15:51
[JS] Objektorientierte Programmierung in JavaScript Neq' Tutorials 0 07.02.2008 13:45
[Umfrage] Hover Effekt: CSS oder Javascript DER_Brain Plauderecke 27 12.09.2006 13:05


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47