【问题标题】:Knockout select bindings overwriting my predefined observable object淘汰赛选择绑定覆盖我预定义的可观察对象
【发布时间】:2017-04-11 00:01:44
【问题描述】:

嗨,我有一个应用程序,它的数据从一个页面传递到另一个页面,并分配了预定义的数据对象/数组,我的问题是我可以看到 observableArray 有一个值,然后它将 SelectedPeople 可观察到不明确的。

我已经消除了数据绑定标记,因为当我删除我的可观察数组没有将任何内容设置为未定义时。

以下是我将 observables/observableArray 绑定到元素的方式。

<select data-bind="options: ObservableArray.People, value: ObservableArray.SelectedPeople, optionsText: 'Name'"></select>
  • ObservableArray.People = 可观察对象数组 - 工作正常并呈现所有下拉选项

  • ObservableArray.SelectedPeople = 可观察的

两者都定义了“名称”对象以匹配optionsText。它在从头开始选择数据时完美运行,但是当我尝试在其中包含预定义数据时,Observable.SelectedPeople 对象在尝试加载时一直以undefined 发送。

基本上我的Observable.SelectedPeople 有一个对象,该对象应该预定义该选择的值,并且该对象100% 匹配下拉列表ObservableArray.People 选项之一。我需要它不要将Observable.SelectedPeople 设置为未定义并填充选择框。

谁能明白为什么会这样。

谢谢

【问题讨论】:

  • 从下拉列表中选择一个值后,您应该检查分配给Observable.SelectedPeople 的值。该值应该是在绑定到下拉列表的对象中定义的property。您应该将该属性的值推送到Observable.SelectedPeople
  • Observable.SelectedPeople 有一个默认值,应该将 Observable.People 填充到设置的那个.. @gkb
  • 看看这篇文章,看看optionsValue属性是如何在选择控件stackoverflow.com/questions/13587230/…中使用的

标签: javascript knockout.js


【解决方案1】:

...并且对象 100% 匹配下拉列表中的一个 ObservableArray.People 选项。

这行让我怀疑您是在使用对象的实际引用,还是只是相似的对象。

例如,这将工作:

var options = [{ id: 1 }, { id: 2 }, { id: 3}];
var selectedOption = ko.observable({ id: 1 });

Knockout 不执行某种deepEquals 比较;如果它看到一个非原始的,它会做一个参考检查。 options[0] !== { id: 1 },所以这个初始选择无效有效。

下面的代码将工作,因为您使用的是您在选择元素中使用的数组中的实际对象:

var options = [{ id: 1 }, { id: 2 }, { id: 3}];
var selectedOption = ko.observable(options[0]);

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 2014-08-22
    • 2013-05-19
    • 2013-05-04
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2011-12-20
    • 2014-09-28
    相关资源
    最近更新 更多