Sono bloccato con quello che deve essere una soluzione semplice. Sto usando knockout.js con i modelli di visualizzazione annidati, e tutto sembra a posto, tranne che la mia funzione di rimozione non funziona correttamente. Sembra che sia vincolante correttamente, tuttavia non viene attivato quando faccio clic su Rimuovi.Knockout nested view model
Perché i modelli di visualizzazione annidati? Lunga storia, ma in sostanza è necessario un sacco di cose per essere su una pagina!
Quindi, ecco il codice:
HTML
<section class="mini-form-container">
<form data-bind="submit: repeatGuest.addDate">
<input type="date" data-bind="value: repeatGuest.previousStay"/>
<button type="submit" class="button-secondary ">Add date</button>
</form>
<div data-bind="foreach: repeatGuest.dates, visible: repeatGuest.dates().length > 0">
<div>
<input data-bind="value: date" disabled="disabled" />
<a data-bind="click: $parent.removeDate">Remove</a>
</div>
</div>
</section>
<section>
<div data-bind="text: ko.toJSON($data)"></div>
</section>
Javascript
function RepeatGuest() {
/// <summary>Child View Model</summary>
this.dates = ko.observableArray();
this.previousStay = ko.observable();
}
RepeatGuest.prototype.addDate = function() {
var self = this.repeatGuest;
if (self.previousStay()) {
self.dates.push({
date: self.previousStay()
});
}
};
RepeatGuest.prototype.removeDate = function (date) {
this.dates.remove(date);
}
function ViewModel() {
var self = this;
self.repeatGuest = new RepeatGuest();
}
ko.applyBindings(new ViewModel());
E qui è il mio violino: http://jsfiddle.net/6Px4M/2/
Quindi, perché la mia funzione di rimozione non viene licenziata?
Possibile domanda a lato: i modelli di vista nidificati indicano il percorso sbagliato da prendere a eliminazione diretta, non sembrano molte informazioni su questo?
Preferisco il modello 'var auto = this'. È più facile per me usare sempre "sé" piuttosto che ricordare di legare le funzioni. Sembra anche più pulito, imo. – Tyrsius
questa roba buona, +1 da parte mia, ma c'era un problema più fondamentale che la funzione non era mai stata eseguita da quando l'ha incollata sul prototipo. Anche se se avesse seguito tutti i tuoi passi si sarebbe risolto. –
@Tyrsius - Stavo cercando di mostrare come è ancora possibile posizionare l'implementazione della funzione sul prototipo. 'self' è un modello raffinato. –