【问题标题】:Knockout select binding淘汰赛选择绑定
【发布时间】:2013-05-04 23:02:53
【问题描述】:

如何防止选择竞价启动时触发选择更改事件?页面上的添加按钮,它将动态添加选择到 DOM。当每个选择框都添加到 DOM 时,会触发更改事件而不是我从选择中选择项目?

【问题讨论】:

  • 请提供一个重现问题的小提琴,我上次遇到这个问题时,它与我的选项是整数时绑定字符串值有关。
  • @RicardoMedeirosPenna 这个小提琴,jsfiddle.net/aroor/DNsgF 我绑定为字符串的值。但在填充 UI 时仍会触发更改事件。

标签: select data-binding knockout.js knockout-2.0


【解决方案1】:

问题是 KnockoutJS 会尝试查找列表框中的哪个元素与 requiredItem 可观察值匹配。一开始没有,这就是为什么它会尝试将其设置为列表框的“标题”。您没有提供一个,因此它将requiredItem 设置为列表框的第一个元素。

你可以做的是在你的数组中添加一个标题项:

self.requireditems = ko.observableArray([
{ desc: "Select an option from the list...", key: 0, editable: false } // ... and then all other items]);

如果你真的不想更新requiredItem

self.selectedItem = ko.observable(self.requiredItems()[0]);

那么如果你想知道是否从列表中选择了一个有效的元素,你可以添加以下属性:

self.isValidSelectedItem = ko.computed(function() { 
     return self.selectedItem().id; 
});

【讨论】:

  • 如果我不想在填充列表时绑定选定项,是否有任何想在列表加载到 DOM 后获取选定时间?
  • 我认为问题与加载列表的那一刻无关。如果你有一个“options”绑定和一个“value”绑定,如果在列表中没有找到被选择的项目,“value”将不可避免地改变......即使在加载DOM之后动态绑定也不会改变这个问题。
猜你喜欢
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2021-04-28
  • 2019-01-05
  • 2016-06-23
相关资源
最近更新 更多