由於某些原因,我無法將對象傳遞給可觀察數組。使用敲除將對象添加到可觀察陣列
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>
警報表明陣列始終是空的,請解釋一下我做錯了感謝。
這是工作,但似乎當我使用alert(self.events()[0] 。名稱());我得到這個錯誤:未捕獲TypeError:對象#沒有方法'名稱',當我輸入alert(self.events()[0] .event.name())然後它的好,但並不意味着我存儲我的數組中的整個視圖模型,而不僅僅是視圖模型的事件屬性。我想讓數組保留jsut事件對象,而不是它自己的視圖模型。 –
2013-04-27 20:13:48
是的,您目前正在將整個日曆viewmodel添加到數組中,因爲'btnAddNewEvent'在'with'綁定之外,所以當前上下文將是您的主視圖模型。解決它的一種方法就是添加'self.event',這樣'self.addEvent = function(){self。events.push(self.event); alert(self.events()。length) alert(self.events()[0] .name());' – nemesv 2013-04-27 20:18:49
sweet,按預期工作 – 2013-04-27 20:22:55