KnockOut.js调用函数后所有值都已分配到下拉列表?

时间:2015-02-16 00:01:38

标签: knockout.js

我正在编写一个敲除脚本,并且只要一个observable的值发生变化就会调用一个函数。调用此函数的元素之一是下拉列表。调用的函数将整个viewmodel发送到服务器进行存储。

当初始化下拉列表时,会调用该函数,并且两次调用服务器。我想知道是否有办法在 所有字段初始化之后不对价值变化采取行动?

1 个答案:

答案 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设置为空字符串将与第一个条目匹配,并且不会导致事件触发。