Può una vista richiamare direttamente una funzione del modello?

3

questa è una domanda fondamentale su MVC (in particolare con AngularJS) e ho trovato domande simili qui, ma non lo stesso problema:

La vista può chiamare una funzione del modello o deve solo chiamare le funzioni del controller?

Ecco l'esempio:

Nel mio modello c'è una funzione per eliminare elementi di una raccolta, come questa:

function deleteItems(searchExpression) { ... }

Ora il mio controller ha un'istanza del mio modello che include quella funzione, come questa:

$scope.data = queryModelFactory.getModel();

Ora desidero chiamare tale funzione quando l'utente fa clic su un determinato elemento nella pagina HTML:

<div ng-click="data.deleteItems('blabla')">Remove Items</div>

È legittimo? O sarebbe meglio implementare una funzione nel controller che sta passando attraverso la richiesta di cancellazione al mio modello come farei in un'architettura a livelli classici? In questo modo:

function deleteItems(searchExpression) {
    $scope.data.deleteItems(searchExpression);
}
    
posta Stefan Woehrer 10.10.2015 - 15:57
fonte

1 risposta

3

Il modello Model-View-Controller divide l'applicazione in tre parti interconnesse, vale a dire il modello, la vista e il controller.

Il componente centrale di MVC, il modello, cattura il comportamento dell'applicazione in termini di dominio problematico, indipendentemente dall'interfaccia utente. Il modello gestisce direttamente i dati, la logica e le regole dell'applicazione. Una vista può essere una qualsiasi rappresentazione in uscita di informazioni, come un grafico o un diagramma. La terza parte, il controller, accetta l'input e lo converte in comandi per il modello o la vista.

La vista non dovrebbe interagire direttamente con il modello, ma delegare gli eventi (ad es. input dell'utente) al controller. Nel tuo caso, l'ultima opzione che hai presentato implementa il modello correttamente.

    
risposta data 10.10.2015 - 20:41
fonte

Leggi altre domande sui tag