5

Sto utilizzando Knockout.js per un'applicazione rich client e consisterà in un numero elevato di ViewModels di knockout.js. Nello sviluppo, ho notato due modi per creare knockout.js ViewModels. Primo modo.Dichiarazioni modello-vista di Knockout.js. Esistono due metodi

function AppViewModel() { 
this.firstName = ko.observable("Bert"); 
this.lastName = ko.observable("Bertington");} 

Secondo modo.

var appViewModel = { 
this.firstName = ko.observable("Bert"), 
this.lastName = ko.observable("Bertington")}; 

C'è qualche differenza specifica in questi due metodi di dichiarazione di ViewModels? Nel knockout.js official page examples hanno usato la prima. Ma in framework di terze parti come Knockout-validations.js ha usato la seconda strada. Quale modo dovrei usare? Qualche vantaggio specifico nell'usarlo?

Ho scoperto che se uso la prima strada, allora non posso usare il framework Knockout-validations.js. Sono davvero confuso su questa questione. Ogni commento è apprezzato.

Grazie.

+0

Ecco un altro collegamento che potrebbe aiutare: http://stackoverflow.com/questions/9589419/difference-between-knockout-view-models-declared-as-object-literals-vs-functions –

risposta

3

Il primo modo definisce un costruttore di oggetti ma non crea un'istanza di un nuovo oggetto, è possibile passare argomenti in questo modo. Se stai creando più oggetti/modelli, questo sarebbe sicuramente meno pesante del secondo.

Il secondo modo consiste nell'utilizzare la sintassi di inizializzazione dell'oggetto, che crea un'istanza di un nuovo oggetto in memoria con qualsiasi campo impostato. In generale questo produce per dimensioni del codice più piccole; se stai creando due oggetti con strutture uguali o simili, usa la prima.

Non c'è motivo per cui non è possibile utilizzare il primo al posto del secondo. Semplicemente creando un nuovo oggetto e trasferiscilo ovunque sia necessario.

Questo:

function AppViewModel(fName, lName) { 
    var self = this; 
    self.firstName = ko.observable(fName); 
    self.lastName = ko.observable(lName); 
} 
... 
var appViewModel = new AppViewModel("Bert", "Bertington"); 

crea lo stesso oggetto come questo:

var appViewModel = { 
    this.firstName = ko.observable("Bert"), 
    this.lastName = ko.observable("Bertington") 
}; 

Il primo permette solo altre AppViewModel s da creare, ad esempio new AppViewModel("Joe", "Shmoe")

2

La differenza che descrivi non è specifica per le librerie a eliminazione diretta o a eliminazione diretta, piuttosto è un problema a livello di lingua ampiamente dibattuto tra la comunità JavaScript. Douglas Crockford, un guru JavaScript, ha due articoli su entrambi i lati della questione:

dai post sparsi nel forum, articoli di blog, e le conversazioni con programmatori JavaScript, sembra che la comunità tende ad abbracciare lo stile prototipale. Dovresti usare lo stile che preferisci. In base alla documentazione, sembra che la libreria Knockout-Validation sia stata progettata tenendo presente lo stile classico. Il vantaggio dello stile classico in questo caso sarebbe semplicemente che è più facile da usare con la libreria Knockout-Validation. Lo svantaggio del modo prototipale è che è più difficile da usare con questa libreria.

Problemi correlati