gpt4 book ai didi

javascript - 使用 knockout 将对象添加到可观察数组

转载 作者:数据小太阳 更新时间:2023-10-29 04:30:09 27 4
gpt4 key购买 nike

出于某种原因,我无法将对象传递给可观察数组。

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.push(event); 是正确的(因为 observable array 实现了 push),只是您的警报是错误的。

正确的调用是

alert(self.events().length)
alert(self.events()[0].name());

因为您需要像常规 ko.observable 一样将可观察数组作为函数调用,以获取数组本身的基础值。

但是,您目前正在将整个 CalendarViewModel 添加到数组中,因为 btnAddNewEvent 在您的 with 绑定(bind)之外,因此当前上下文将是你的主视图模型。

解决它的一种方法:只需将 self.event 添加到数组中,因此:

self.addEvent = function() 
{
self.events.push(self.event);
alert(self.events().length)
alert(self.events()[0].name());
}

但是当你想要添加另一个元素时这可能会导致问题,因为你最终会引用同一个元素,所以正确的解决方案是将属性复制到某处:

所以我会为你的事件类创建一个构造函数:

var Event = function(data) {
var self = this;
self.name = ko.observable(data.name()),
self.adress = ko.observable(data.adress()),
self.startTime = ko.observable(data.startTime()),
self.endTime = ko.observable(data.endTime())
}

并在addEvent中推送一个新事件

self.events.push(new Event(self.event));

关于javascript - 使用 knockout 将对象添加到可观察数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com