2013-05-27 2 views
6

Ci sono diversi moduli a pagina:azione Esegui dopo tutti i moduli requirejs vengono caricati

// module 1 
require(['signalr'], function(s) { 
    s.subscribe('myhub1', function() { /* some code */ }); 
}); 

// module 2 
require(['signalr'], function(s) { 
    s.subscribe('myhub2', function() { /* some code 2 */ }); 
}); 

e non v'è il metodo che dovrebbe essere richiamato dopo tutti i moduli sono invocati (tutti subscribtions sono fatte):

require(['signalr'], fuinction (s) { s.connect(); }); 

la soluzione possibile è definire moduli e scrivere così:

// module 1 
define('module 1', ['signalr'], function(s) { 
    s.subscribe('myhub1', function() { /* some code */ }); 
}); 

// module 2 
define('module 2', ['signalr'], function(s) { 
    s.subscribe('myhub2', function() { /* some code 2 */ }); 
}); 
require(['signalr', 'module 1', 'module 2'], fuinction (s) { s.connect(); }); 

Ma il problema è che d pagine ifferent ha diversi moduli, dire:

page1.cshtml: modulo 1

page2.cshtml: Modulo 1, Modulo 2

quindi non posso scrivere: richiedono ([ 'signalr ',' module 1 ',' module 2 '], fuinction (s) {s.connect(); }); perché il modulo 2 potrebbe non essere definito su page2.cshtml.

+0

Potresti non condizionale costruire una matrice in base alle esigenze pagine e quindi eseguire che, attraverso la funzione di richiedere? Questo sembrerebbe il modo più sicuro per raggiungere questo obiettivo. –

+0

Intresting .. Proverò a suggerirti. Grazie. – Jekas

risposta

3

Il modo migliore sarebbe costruire in modo condizionale un array e passarlo alla funzione require e quindi eseguire il completamento nella richiamata come indicato nella domanda.

var modulesToLoad = []; 

// Build the array 

require(modulesToLoad, function (s) { 
    s.connect(); 
}); 

Se per qualche motivo non è possibile aggregare le chiamate in un unico richiedono è necessario tenere traccia dei moduli da caricare ed eseguire un controllo al termine che tutti hanno caricato, quindi eseguire il codice pulito fino

var checkIfLoaded = { 
    myhub1 : false, 
    myhub2 : false, 
    myhub3 : false 
} 

function checkIfReady(s) { 
    for (var prop in checkIfLoaded) { 
     if (! checkIfLoaded[prop]) { 
      return false; 
     } 
    } 

    // Completion code 
    s.connect(); 
} 

require(['myhub1'], function(s) { 
    checkIfLoaded.myhub1 = true; 
    checkIfReady(s); 
}); 

require(['myhub2'], function(s) { 
    checkIfLoaded.myhub2 = true; 
    checkIfReady(s); 
}); 

Pensando a questo, si dovrebbe essere in grado di costruire un array di requisiti

+0

Grazie. Ho usato l'approccio con un array condizionale di moduli dipendenti condizionato. – Jekas