我的视图模型中有一组对象。将值绑定到select
控件时遇到问题。该值是JS对象,而不是基本类型。当我在绑定集合中有多个对象并更改select
控件时,所有其他对象的值都将更新为新选择的值。就像所有值都绑定到foreach
绑定中的同一个实例一样。只有在插入新行时才会出现错误,而不是仅仅在编辑现有行时。
我已经解决了很多复杂问题,并在JSFiddle上有一个显示问题的例子。
http://jsfiddle.net/zero21xxx/5vgDy/
查看错误的步骤
我希望一行中的更改不会影响任何其他行。
答案 0 :(得分: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)];
}
我也用[]改变了所有可观察到的可观察数组...
然后它似乎工作。小提琴... http://jsfiddle.net/keith_nicholas/wmxJX/答案 1 :(得分:1)
每次您选择其他selectedDatabaseField
时,它都会重建availableOptions.options
。每个行都与选项绑定在相同的选项上。重建选项后,每行的选定值不再是有效选项。
即使对象看起来完全相同,它也不相等,除非它是对同一对象的引用。
因此,由于选项已更改且当前选定的值不再有效,value
绑定将指定第一个选项作为值(除非您指定了optionsCaption)。
因此,您可能不希望重建选项,如果它们已经构建,或者您希望每行都有单独的选项,而不是绑定到同一个数据库字段对象。