Entrambi i blocchi di codice sotto funzionano, nel contesto e sembrano completamente equivalenti dal punto di vista funzionale. Capisco ragionevolmente lo js prototypes, quindi non sto chiedendo loro di per sé (a meno che lo sia l' l'unica differenza).viewmodel .prototype .function vs self .function in viewmodel?
Piuttosto, confrontando due modi semplici per mettere un metodo su un modello di vista come illustrato di seguito, ci sono implicazioni/differenze per Knockout, ad esempio tempo vincolante?
define ([ "knockout", "testo ./ home.html!"], La funzione (ko, homeTemplate) {// < - Un AMD Module
function HomeViewModel(route) { var self = this; self.message = ko.observable('Snacks!'); self.eatSomething = function() { self.message('Yum, a viewmodel snack.'); }; } return { viewModel: HomeViewModel, template: homeTemplate }; });
contro l'aggiunta di metodo via prototipo:
define ([ "knockout", "! testo ./ home.html"], la funzione (ko, homeTemplate) {
function HomeViewModel(route) { this.message = ko.observable('Snacks!'); }; HomeViewModel.prototype.eatSomething = function() { this.message('Yum, the same viewmodel snack, only different?'); }; return { viewModel: HomeViewModel, template: homeTemplate };
});
(il codice è un semplice mod di Yeoman's uscita ponteggio tramite un Knockout generator. Ha creato il codice piastra di caldaia per un knockout component, abbastanza recente (KO 3.2) e caratteristica molto gradita. Un bel componente explainer KO è here.)
Chiarimento utile: cosa intendi per ** 'il modello del modulo rivelatore' **? A proposito, mi sono appena imbattuto in [Knockout AMD Helpers] (https://github.com/rniemeyer/knockout-amd-helpers) - sembra estremamente utile, specialmente come i moduli contenenti i propri modelli. Quindi grazie anche per quello! –
Ci sono alcuni link che descrivono il modello del modulo rivelatore, eccone uno: http://weblogs.asp.net/dwahlin/techniques-strategies-and-patterns-for-structuring-javascript-code-revealing-module- modello. Fondamentalmente, definisci i metodi che vuoi internamente e sei in grado di fare riferimento direttamente alle variabili. Quindi, si restituisce l'API pubblica dal modulo con i metodi che si desidera esporre con qualsiasi nome con cui si desidera esporli. Spero possa aiutare! –
@RPNiemeyer - non hai scritto un blog su questa domanda esatta? Ho pensato di ricordare di averlo letto in passato e di aver fatto ricerche su Google e questo è il posto dove sono finito – user210757