Knockout选择绑定覆盖我预定义的可观察对象

时间:2016-11-26 23:57:16

标签: javascript knockout.js

您好我有一个应用程序,数据从一个页面传递到另一个页面,并为其分配了预定义的数据对象/数组,我的问题是我可以看到observableArray有一个值,然后它转为{{1可观察到未定义。

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

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

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

  • ObservableArray.People =可观察

两者都有&#39;姓名&#39;对象定义为匹配ObservableArray.SelectedPeople。从头开始选择数据时它非常有效,但是当我尝试在其中预定义数据时,optionsText对象在尝试加载时会一直以Observable.SelectedPeople的形式发送。

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

任何人都可以看到为什么会这样。

由于

1 个答案:

答案 0 :(得分:1)

  

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

这一行让我怀疑你是否正在使用对象的实际引用,或只是类似的对象。

例如,这将工作:

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

Knockout没有执行某种deepEquals比较;如果它看到非原始的,它会进行参考检查。 options[0] !== { id: 1 },因此初始选择有效。

下面的代码会有效,因为您使用的是select元素中使用的数组中的实际对象:

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