Aus irgendeinem Grund habe ich Probleme, ein Objekt zu beobachtbaren Array zu übergeben.Object zu Observable Array mit Knockout hinzufügen
function CalendarViewModel() {
var self = this;
self.event = {
name : ko.observable(""),
adress : ko.observable(""),
startTime : ko.observable(""),
endTime : ko.observable("")
}
self.events = ko.observableArray([
])
self.addEvent = function (event) {
self.events.push(event);
alert(self.events.length)
alert(self.events[0].name());
}
meiner Sicht:
<fieldset class="add-event-fieldset">
<div data-bind="with: event">
<legend>Add Event</legend>
<div style="text-align: center;">
<label class="title-label">What </label>
</div>
<div>
<label>Name: </label>
<input type="text" name="whatTxtBox" data-bind="value: name" />
</div>
<div>
<label>Where: </label>
<input type="text" name="whereTxtBox" data-bind="value: adress" />
</div>
<div style="text-align: center;">
<label class="title-label">When </label>
</div>
<div>
<label>start: </label>
<input type="text" id="startHourTxtBox" data-bind="value: startTime" />
</div>
<div>
<label>end: </label>
<input type="text" id="endHourTxtBox" data-bind="value: endTime" />
</div>
</div>
<input type="hidden" name="" id="hiddenDay" />
<button id="btnAddNewEvent" data-bind="click: $root.addEvent">+</button>
</fieldset>
Die Warnungen zeigen, dass das Array immer leer ist, bitte erklären, was ich falsch mache Dank.
jetzt ist es funktioniert, aber es scheint, dass, wenn ich alert (self.events() [0] .Name()); Ich erhalte diesen Fehler: Uncaught TypeError: Object # hat keine Methode 'name', Wenn ich einen Alarm eintippe (self.events() [0] .event.name()), dann ist es in Ordnung, aber bedeutet das nicht, dass ich speichere das gesamte Ansichtsmodell in meinem Array und nicht nur die Ereigniseigenschaft des Ansichtsmodells. Ich möchte, dass das Array nur die Ereignisobjekte enthält, nicht das Ansichtsmodell. –
Ja, Sie fügen gerade dem View-Model des ganzen Kalenders zum Array hinzu, weil 'btnAddNewEvent' außerhalb der' with'-Bindung liegt, so dass der aktuelle Kontext Ihr Haupt-View-Modell ist. Ein Weg, um es zu lösen, und fügen Sie das 'self.event' so hinzu' self.addEvent = function() {self.events.push (self.event); alert (self.events(). length) alert (self.events() [0] .name()); ' – nemesv
süß, funktioniert wie erwartet –