tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
JA
ANTWORTEN
25
ZUGRIFFE
487
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    209
    Zitat Zitat von Sven Mintel Beitrag anzeigen
    Die Funktion $ gibt ein Objekt zurück, und dies zurückgegebene Objekt hat eine Methode namens datepicker
    Ah ja. Gut, das verstehe ich.
    Jetzt bleibt noch ein Restpunkt bei mir: Wenn eine andere Lib auch eine function datepicker() hätte, dann kracht's!?
     

  2. #17
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Warum soll es dann krachen?
    Code :
    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
    
    <!DOCTYPE html>
    <html>
    <head>
      <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
      <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
      <style type="text/css">
        #draggable,#clickable { width: 100px; height: 130px; background: red;border:1px dotted #000; margin:12px;}
      </style>
      <script>
      jQuery.noConflict();  
      </script>
    </head>
    <body>
    <div id="draggable">Drag me with jQuery <br/> or <br/>Doubleclick me with my own Method</div>
    <script>
    function $(id)
    {
      var obj={
            node:document.getElementById(id),
            toggle:function()
                      {
                        alert('dblclick works!');
                        this.node.style.backgroundColor=
                          (this.node.style.backgroundColor=='white')
                            ?'red'
                            :'white'                    
                      }
          };
      obj.draggable=function()
                      {
                        this.node.ondblclick=function(){obj.toggle();}
                      };
      return obj;
    }
     
    jQuery("#draggable").draggable();
    $("draggable").draggable();
    </script> 
    </body>
    </html>
    Geändert von Sven Mintel (10.09.10 um 10:49 Uhr)
     

  3. #18
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    Warum probierst du es denn nicht einfach aus.
    Wie kommt es, dass sich die jQueryUI-Lib dafür zuständig fühlt?
    Dafür zuständig fühlen tut sich überhaupt niemand. Ein funktionsaufruf ist kein "In den Raum rufen und abwarten welches Framework es entgegen nimmt", sondern ein Aufruf einer Funktion die durch seinen Namen festgelegt wurde. In diesem Fall ist der Name der funktion ganz einfach $. Somit wird immer das zu letzt eingebundene Framework das $ verwenden angesprochen.

    Hier noch ein Beispiel:
    Code javascript:
    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
    
    //jQuery Framework
    var $ = function(selektor)
    {
      return {
                selektor:selektor,
                datepicker:function()
                           {
                            alert('Ich bin die jQuery datepicker function');
                           },
                fooBar:function()
                            {
                            alert('ich bin die fooBar function die es nur in jQuery gibt');
                            }
             };
    }
     
    //Irgendein anderes Framework z.B. mootools
    var $ = function(selektor)
    {
        return {
            selektor:selektor,
            datepicker:function()
                {
                    alert('Ich bin die mootools datepicker function');
                }
        };  
    }
     
     
    $('#irgendwas').datepicker();
    $('#irgendwas').fooBar();
    Das gibt ein alert mit :
    Ich bin die mootools datepicker function
    Und eine Fehlermeldung mit:
    Fehler: $("#irgendwas").fooBar is not a function
     
    In order to understand recursion, one must first understand recursion.

  4. #19
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    209
    Zitat Zitat von rd4eva Beitrag anzeigen
    ... sondern ein Aufruf einer Funktion die durch seinen Namen festgelegt wurde. In diesem Fall ist der Name der funktion ganz einfach $. Somit wird immer das zu letzt eingebundene Framework das $ verwenden angesprochen...
    Genau. Das verstehe ich mittlerweile.
    Aber wie Dein Beispiel zeigt, wird dort die erste Lib (jQuery Framework) ausgehebelt, da beide mit $ arbeiten.

    Und genau das ist die Krux: Fast alle arbeiten mit $. Wahrscheinlich ist das cooler als ein klarer Name wie z.B. "xyzFramework"!?

    Wie wir weiter oben ja sehen, macht es jQuery gut: Die bieten ein "noConflict()" an. Damit kann man dann nämlich klar adressieren (mit "jQuery.")

    Wenn alle klare Namen verwenden würden statt $ würde es auch nicht diese "ich überschreibe die letzte Lib"-Effekte geben.

    Oder bin ich da auf dem Holzweg?

    Gruß,
    Frank
     

  5. #20
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    Und genau das ist die Krux: Fast alle arbeiten mit $. Wahrscheinlich ist das cooler als ein klarer Name wie z.B. "xyzFramework"!?
    Ob es dafür einen bestimmten Grund gibt kann ich dir nicht sagen. Eventuell liegt es ganz einfach daran das frameworks auch den Schreibaufwand reduzieren wollen. Oder sie haben gegenseitig abgeschaut und nachgemacht. Oder sie wollen mehr oder weniger dazu zwingen nur ihr framework zu benutzen.

    Wie wir weiter oben ja sehen, macht es jQuery gut: Die bieten ein "noConflict()" an. Damit kann man dann nämlich klar adressieren (mit "jQuery.")

    Wenn alle klare Namen verwenden würden statt $ würde es auch nicht diese "ich überschreibe die letzte Lib"-Effekte geben.

    Oder bin ich da auf dem Holzweg?
    Ja jQuery ist da vorbildlicher als seine Kollegen und nein du bist nicht auf dem Holzweg
    FrankWST bedankt sich. 
    In order to understand recursion, one must first understand recursion.

  6. #21
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    209
    Zitat Zitat von rd4eva Beitrag anzeigen
    ... Oder sie wollen mehr oder weniger dazu zwingen nur ihr framework zu benutzen.
    Danke, damit bin ich erst mal auf Stand.

    @Sven:
    Warum sollte es dann krachen?
    Damit meinte ich die Überschreibung durch die andere $-verwendende Lib.


    Wie könnte man denn sowas lösen? Globales ersetzen des $ durch was anderes in der Lib selbst wird wohl nicht gehen...
    Geändert von FrankWST (10.09.10 um 12:43 Uhr)
     

  7. #22
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    209
    Zitat Zitat von FrankWST Beitrag anzeigen
    Wie könnte man denn sowas lösen? Globales ersetzen des $ durch was anderes in der Lib selbst wird wohl nicht gehen...
    Ich glaube, das Zauberwort heisst "Namespace".

    Kann man denn (ohne viel in den Innereien der Lib herum basteln zu müssen) diese in einen Namespace kapseln?
     

  8. #23
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    Wie könnte man denn sowas lösen? Globales ersetzen des $ durch was anderes in der Lib selbst wird wohl nicht gehen...
    Es ist relativ einfach.
    Am Beispiel jQuery müsste man nur folgende Zeile ändern
    Code javascript:
    1
    2
    3
    
    window.jQuery = window.$ = jQuery;
    //Um zum Beispiel jQueryFrameWork anstatt $ verwenden zu können muss man nur folgendes machen:
    window.jQuery = window.$ = window.jQueryFrameWork = jQuery;

    Am Beispiel mootools muss man folgendes einfügen um z.B. mootoolsFrameWork verwenden zu können.
    Code javascript:
    1
    2
    3
    4
    5
    
    if (window.mootoolsFrameWork == null) Window.implement({
        mootoolsFrameWork: function(el, nc){
            return document.id(el, nc, this.document);
        }
    });

    Die jeweilige $ zuordnung kann man dann ja auch rauswerfen.

    Gut möglich das ich was übersehen habe aber in einem schnell Test hats funktioniert.
    FrankWST bedankt sich. 
    In order to understand recursion, one must first understand recursion.

  9. #24
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    209
    Danke rd4eva,

    das werde ich mal ausprobieren!

    Gruß,
    Frank
     

  10. #25
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    In PrototypeJS sollte ein Suchen/Ersetzen ausreichen.

    Ersetze bspw. alle
    Code :
    1
    
    $(
    durch
    Code :
    1
    
    $P(
    und verwende dort, wo du bisher $ genutzt hast, das $P , und es sollte keine Probleme geben.
    FrankWST bedankt sich. 

  11. #26
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    209
    Danke Sven!
    Das ist natürlich eine wunderbar einfache Lösung.
    Gruß,
    Frank