Ich bin ein Projekt von einer „alten“ Browser-Stil Modulstruktur zu einem „neuen“ browser- oder Wechsel - serverseitige JavaScript Modul Struktur mit require.js.Aufrufe von Methoden in RequireJs Module von HTML-Elementen wie Onclick-Handler
Auf dem Client ich ein Offsite bin mit gehostete jQuery, so begann ich aus dem Beispiel, das sie in der "use priority config" Technik der README geben:
<title>My Page</title>
<script src="scripts/require.js"></script>
<script>
require({
baseUrl: 'scripts',
paths: {
jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min',
jqueryui: ...,
...
... // bunch more paths here
},
priority: ['jquery']
}, [ 'main' ]);
</script>
Das ist eigentlich alles in Ordnung arbeiten. Aber ich möchte die Funktionalität von main auf die HTML-Webseite selbst exportieren. Zum Beispiel:
<a class="button" href="#" onclick="MyApi.foo();">
<img src="foo.png" alt="foo" />Click for: <b>Foo!</b>
</a>
Bevor in das AMD-Modul passendes Muster hatte ich Funktionalität von meinen verschiedenen Dateien ausgesetzt durch ein Wörterbuch Objekt im globalen Raum zu schaffen:
// main.js
var MyApi = {};
jQuery(document).ready(function($) {
// ...unexported code goes here...
// export function via MyApi
MyApi.foo = function() {
alert("Foo!");
};
});
Aber ich weiß nicht, Was ist der richtige Ansatz in require.js? Ist es in Ordnung, in den HTML-Code mehr require
Anweisungen innerhalb von <script>
Tags, und dann Module benennen, so dass es von der Webseite verwendet werden kann? Oder sollte das immer dynamisch innerhalb von main.js gemacht werden, zB $('#foobutton').click(...)
?
Hey, danke (zurück zu diesem Projekt und im Detail auf die Antwort). Sie stellen den Grund in Worte, warum Code in onclick nicht passt mit dieser Methode; Handler, die direkt im HTML der Seite sind, würden von jeder API, die sie aufrufen, den gleichen importierten Namen für alle geladenen .js-Dateien haben (äh ... oder?). Aber mit diesem Token ... sollte page.js in diesem Muster nicht ausdrücklich die jquery-Zuordnung zu $ erwähnen, anstatt sie zu erben, nur weil sie von foo so importiert wurde? – HostileFork
Ich habe immer an Module in dem Sinne gedacht, dass sie wiederverwendbare, kategorisierte Code-Teile sind. Aber mit dieser Herangehensweise muss alles in ein Modul geworfen werden und es gibt keine klare Unterscheidung zwischen regulären Dingen wie Ereignisbindung und tatsächlichen Modulen - wenn Sie verstehen, was ich meine. Gibt es keinen anderen Weg? – backdesk
In der Frage hängt das DOM vom globalen MMyApi-Objekt ab. In dieser Antwort hängt das Seitenmodul vom DOM ab, das ebenfalls global ist. Es muss eine Art Abhängigkeit geben. Welche zu verwenden ist vielleicht eine subjektive Wahl. –