Sono davvero un principiante del dojo ma come ho iniziato a sviluppare una nuova applicazione con dojo versione 1.7.2 volevo anche usare la nuova sintassi AMD per le funzioni. Sfortunatamente non sembra averlo capito. :-(Dojo AMD: impossibile chiamare una funzione all'interno di un fabbisogno
Quello che mi infastidisce di più è che non posso semplicemente chiamare qualsiasi funzione che si trova all'interno di un -block "richiedono". Per esempio io ho una pagina, che in apertura crea una tabella dinamica con diversi widget in .. ogni riga poi ho un pulsante che aggiunge una riga vuota ogni volta premuto
Senza AMD sintassi sarebbe facile:
- messo tutto il mio "dojo.require()" nel HEAD
- e quindi creare un sacco di mie funzioni per creare la tabella e i widget
- la funzione aggiungi riga potrebbe facilmente accedere a qualsiasi variabile globale la mia funzione precedente zione riempito
Ma con AMD la sua in questo modo:
funzione iniziale crea la tabella e widget:
function fillReportTable(repId) {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
function createNewRow(tbl) { ...}
function function1() {... }
function function2() {... }
function function3() {... }
}
Ora il pulsante "Add Empty Row" chiama la sua funzione "addEmptyRow".
Ma in questa funzione devo:
- fare un altro richiede per ogni dojo modulo nuovo
- non posso utilizzare una delle funzioni che sono "dentro" del -funzione "fillReportTable". Ad esempio, il "createNewRow" -funzione
function addEmptyRow() {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
}
Tutto questo sembra essere così tanto complicato con AMD.
O mi manca qualcosa di ovvio qui?
Con AMD se si separa il proprio codice in molte piccole funzioni, si esegue nuovamente il "require" all'interno di EACH? O metti tutte le funzioni all'interno di uno "richiedi" con l'elenco completo?
Se lo fai nel secondo modo, come puoi chiamare queste funzioni dagli eventi del widget?
così, 'fillReportTable: fillReportTable' nell'oggetto ritorno esporterà la funzione 'fillReportTable()'? – joakimdahlstrom
Sì, è vero. Quando il modulo * mymodule * è 'require'd, il caricatore AMD carica un particolare file JS per quel modulo (nel nostro caso 'mymodules/mymodule.js'. All'interno di quel file JS si passa una funzione a' define', e questa funzione è usata per "esportare" le funzionalità del modulo.Nel tuo caso, il modulo rappresenta un oggetto che ha due funzioni di supporto –
Quindi ora posso chiamare mymodule.fillReportTable() da qualsiasi luogo al di fuori della richiesta? – Andy