我正在编写一个敲除脚本,并且只要一个observable的值发生变化就会调用一个函数。调用此函数的元素之一是下拉列表。调用的函数将整个viewmodel发送到服务器进行存储。
当初始化下拉列表时,会调用该函数,并且两次调用服务器。我想知道是否有办法在 所有字段初始化之后不对价值变化采取行动?
答案 0 :(得分:0)
如果没有更多信息或示例代码,我最好的猜测是你在将它绑定到列表时不会初始化observable。或者您将其设置为列表中不存在的值。
下拉列表始终在绑定后选择列表中的第一个项目。如果列表中的项目与observable的值匹配,则Knockout将选择列表中的项目。
请参阅此JSFiddle示例:http://jsfiddle.net/Quango/xxz32L1q/
// uninitialized item
self.Item1 = ko.observable();
// pre-initialized item
self.Item2 = ko.observable("c");
项目1未初始化 - 因此当列表绑定时,将选择第一个项目,并且Item1值是指定的值。因此,您会在日志中看到Item1已更改。
将第2项初始化为' c' - 当该列表绑定时,不会触发任何事件,因为Item2不会被更改。
使用的常见模式是在列表中包含特殊值或空白值,例如
<select>
<option value=''>[please select an option]</option>
将observable设置为空字符串将与第一个条目匹配,并且不会导致事件触发。