0

我的视图模型中有一组对象。select将值绑定到控件时遇到问题。该值是一个 JS 对象,而不是原始类型。当绑定集合中有多个对象并更改select控件时,所有其他对象的值都会更新为新选择的对象。就像所有值都绑定到绑定内的同一个实例一样foreach。该错误似乎仅在插入新行时发生,而不是在简单地编辑现有行时发生。

我已经消除了很多复杂性,并在 JSFiddle 上有一个显示该问题的示例。

http://jsfiddle.net/zero21xxx/5vgDy/

查看错误的步骤

  1. 从第 1 行的下拉列表中选择结算类型
  2. 从右侧的新下拉菜单中选择“二”。
  3. 从第 2 行的下拉列表中选择结算类型
  4. 现在,第 1 行和第 2 行都将在选择框中设置为“一”。

我希望一行中的更改不会影响任何其他行。

4

2 回答 2

1

你如何设置它有点复杂,但是,我认为问题在于,你的 id 不是你所期望的,

 function getValues(tabId) {
                console.log("tabId " + tabId);
                if (lookUp[tabId]) {

如果我将它添加到您的代码中,它会显示相同的 tabId,这意味着您正在处理相同的对象。

如果我每次都更改 getValues

 function getValues(tabId) {
                console.log("tabId " + tabId);
                return  [new DatabaseField(nextId(), "Name", "Attorney Name", DataType.STRING.id),
                                                             new DatabaseField(nextId(), 
"Type", "Settle Type", DataType.DROPDOWN.id)];
}

我也将所有带有 [] 的 observables 更改为 observable 数组...

然后它似乎工作。小提琴... http://jsfiddle.net/keith_nicholas/wmxJX/

于 2012-06-12T04:08:06.407 回答
1

每次您选择不同时,selectedDatabaseField它都会重建availableOptions.options. 每一行都与这些相同的选项绑定为选项。重建选项时,每行的选定值不再是有效选择。

即使对象看起来完全一样,除非它是对同一对象的引用,否则它也不相等。

因此,由于选项已更改并且当前选择的值不再有效,value绑定将分配第一个选项作为值(除非您指定了 optionsCaption)。

因此,您可能不想重新构建选项,如果它们已经构建,或者您希望为每一行提供单独的选项,而不是绑定到同一个数据库字段对象。

于 2012-06-12T04:22:01.227 回答