По какой-то причине у меня возникли проблемы с передачей объекта наблюдаемому массиву.добавить объект к наблюдаемому массиву с использованием нокаута
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());
}
мой взгляд:
<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>
Оповещения показывают, что массив всегда пустой, пожалуйста, объясните, что я делаю неправильно спасибо.
теперь она работает, но мне кажется, что, когда я использую сигнал (self.events() [0] .имя()); Я получаю эту ошибку: Uncaught TypeError: Object # не имеет метода 'name', когда я печатаю в alert (self.events() [0] .event.name()), тогда это нормально, но разве это не значит, что я храню всю модель представления в моем массиве, а не только свойство события модели представления. Я хочу, чтобы массив удерживал jsut объекты событий, а не модель представления. –
Да, вы теперь добавляете к календарю viewmodel в массив, потому что 'btnAddNewEvent' находится за пределами привязки' with', поэтому текущий контекст будет вашей основной моделью представления. Один из способов решить эту проблему просто и добавить 'self.event' так' self.addEvent = function() {self.events.push (self.event); alert (self.events(). length) alert (self.events() [0] .name()); ' – nemesv
сладкий, работает как ожидалось –