2012-11-16 3 views
9

Ich lade drei Skripte auf meiner Webseite, und ich möchte eine Funktion auslösen, sobald zwei von ihnen das Laden beendet haben.Ist es möglich, die Funktion ready() von Head JS auf zwei Skripte warten zu lassen?

head.js(
    { webfont: 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' }, 
    { jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' } 
); 

Im Idealfall würde Ich mag Lage sein, die folgenden zu tun, aber es scheint nicht möglich head.ready zu machen() für zwei Skripte warten zu laden, nach den documentation (siehe Script Organisation).

head.ready('jquery', function() { 
    // Code that requires jQuery. 
}); 

// This is not supported. :-(
head.ready('jquery', 'analytics', function() { 
    // Code that requires both jQuery and Google Analytics. 
    // ... 
}); 

Also wie soll ich das lösen? Wenn ich die Ready-Methoden verschachteln kann, kann ich sicher sein, dass mein Code ausgelöst wird, oder wird er nur ausgelöst, wenn jquery das Laden vor den Analysen beendet?

head.ready('jquery', function() { 
    // Code that requires jQuery. 
    // ... 
    head.ready('analytics', function() { 
     // Code that requires both jQuery and Google Analytics. 
     // ... 
    }); 
}); 

könnte eine andere Lösung, die die Lade Aussagen in zwei Teile zu brechen sein, so. Aber werde ich immer noch voll von dem asynchronen Laden der Skripte profitieren, oder wird webfont vor jquery und analytics vollständig geladen?

head.js(
    { webfont: 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' } 
); 

head.js(
    { jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' }, 
    function() { 
     // Code that requires both jQuery and Google Analytics. 
     // ... 
    } 
); 

head.ready('jquery', function() { 
    // Code that requires jQuery. 
    // ... 
}); 
+0

Ich weiß nicht, über HeadJS war, aber ich erwarte, dass solche Techniken verschachtelte Aufrufe vollkommen in Ordnung bringen. Ähnlich wird in Java 'Process.join()' bei mehreren Prozessen einfach nacheinander benannt, weil, selbst wenn die Reihenfolge der Prozessvervollständigung von der Reihenfolge der 'join()' Aufrufe abweicht, zuvor abgeschlossene Prozesse dies tun einfach Ursache 'Join', um sofort zurückzukehren. Ich erwarte einen 'ready()' Aufruf für eine bereits geladene Bibliothek, um den Callback sofort (oder beim nächsten Tick) aufzurufen. –

+1

Die Dokumentation und die Homepage zeigen einige klare Beispiele für das Warten auf das Laden mehrerer Skripts. Was siehst du? –

Antwort

10

Da Skripte in dieser Reihenfolge ausgeführt werden (auch wenn parallel geladen), können Sie für das Skript warten, das "liest-in-line"

head.js(
    { webfont : 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' }, 
    { jquery : 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' } 
); 

head.ready('analytics', function() { 
    // when this triggers, webfont & jquery will have finished loading too 
}); 
+0

Sie haben die Wörter extrem richtig verstanden: "Sie laden parallel, führen aber in der Reihenfolge aus". +1 für dich. – iMatoria