Quindi sto costruendo un'app e sto cercando di implementare la struttura dell'app in modo che sia robusta e scalabile in futuro.
La mia app è divisa principalmente in moduli JavaScript (pattern rivelatore) :
// filter.js file
//My javascript module structure
var filter = (function(){
var _privateMethod = function(){
}
var publicMethod = function(){
_privateMethod();
}
return{
publicMethod: publicMethod
}
});
Ora il problema principale è che voglio usare AngularJS anche all'interno della mia app e AngularJs ha i suoi moduli angolari in questo modo:
// app.js file
var myApp = angular.module('myApp',[]);
myApp.controller('myController', function($scope){
});
Il modo in cui ho pianificato la mia app sviluppata è:
- Tutte le chiamate HTTP al server verranno eseguite all'interno del mio modulo JavaScript o per essere più chiare all'interno del mio "filter.js" file (vedi sopra)
- I dati restituiti dalle chiamate HTTP al server verranno quindi restituiti al controller angularjs o nel mio caso il "app.js" file (vedere sopra e il file controller / app.js sarà responsabile dell'aggiornamento del file view / html.
La ragione per fare questo è che tutte le mie funzioni che si collegano con il server e gestiscono i dati sono all'interno di un ambito privato (il modulo filter.js) e nessuno dovrebbe avere accesso a quelle funzioni in quanto vengono tenute fuori dal ambito globale.
Ma per passare i dati dal mio file filter.js al mio controller app.js angolare ho dovuto usare i callbacks
Di seguito è riportato il codice completo del mio scenario sopra descritto:
filter.js
var filter = (function(){
// public method
var testMethod = function(callback){
loadDoc(function(dta){
alert(dta);
callback(dta);
})
};
// private Method
function loadDoc(callback) {
// Create the XHR object to do GET to /data resource
var xhr = new XMLHttpRequest();
var dta;
xhr.open("GET","url",true);
// register the event handler
xhr.addEventListener('load',function(){
if(xhr.status === 200){
//alert("We got data: " + xhr.response);
dta = xhr.response;
callback(dta);
}
},false)
// perform the work
xhr.send();
}
return {
testMethod: testMethod
};
})();
app.js:
var myApp = angular.module('myApp',[]);
myApp.controller('myController', function($scope){
$scope.myFunc = function(){
filter.testMethod(function(dta){
alert(dta);
$scope.test = dta;
console.log($scope.test);
});
};
});
Dalla mia precedente struttura di codice puoi vedere che sto utilizzando i callback per inviare dati ai miei controller.
La mia domanda:
-
La mia domanda è che lo scenario sopra descritto di come vedo il mio codice implementazione e struttura, è quell'approccio giusto ?
-
L'implementazione aderisce al javascript buono, pulito e corretto codice?
-
C'è qualcos'altro che posso fare per migliorare la struttura del codice della mia app?