【发布时间】:2013-02-01 23:19:32
【问题描述】:
我在显示从组合框到淘汰赛列表的值时遇到了一个问题。 请在下面的图片中我从组合框中选择项目。当我从组合框中选择项目时,它会更新具有相同值的所有行。
左侧的列表不存储数据库中组合框中的名称,但它存储 id。所以组合框和列表与称为状态的列相连。在我的 html 中,我定义了如下列表,其中 ChangeControlName 是我要绑定到列表的列表
<tbody data-bind="foreach: versionDataByProduct">
<tr data-bind="click: $root.EditVersionDetail, css: { selected: isSelected}" >
<td data-bind="text: Name "></td>
<td data-bind="text: Code"></td>
<td data-bind ="text: PlatformVersionName"></td>
<td data-bind ="text: ChangeControlName"></td>
</tr>
组合框在我的视图模型中如下加载
// Load Change Control List
function loadChangeControlList() {
$.ajax({
url: "../RestService/Product/ChangeControlList",
type: "PUT",
contentType: 'application/json',
processData: false,
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
success: function (allData) {
var mappedChangeControls = $.map(allData, function (item) {
return new changeControlList(item);
});
self.ChangeControls(mappedChangeControls);
}
});
}
我已将我的组合框绑定在 html 中,如下所示
<td><select id="selModuleType" data-bind="options: $root.modules, optionsCaption: 'Please select Module...' , value: $root.editModuleId , optionsText: 'ModuleName'" /></td>
当我选择上图所示左侧的行时,我会选择行。在值 editModuleId 的订阅事件上,我尝试将值分配给选定的行,如下所示。
self.editChangeControl.subscribe(function (value) {
if (!value) {
return;
}
self.selecteditem().ChangeControlId(value.Status());
self.selecteditem().ChangeControlName(value.ChangeControl());
});
在上面的代码中 selecteditem 包含我们选择的行。正如您在上面的代码中看到的,ChangeControlId 是我们从组合框中选择的值的 id,它已正确设置到列表中。但是名称设置不正确。原因是 ChangeControlId 存储在数据库中。 ChangeControlId 是显示这些行的表的一部分。我想要的 ChangeControlName 仅用于显示目的。我应该怎么办?我也尝试使用计算的 observable,但它在列表中显示为“对象对象”。我使用了如下计算的 observable
this.ChangeControlName = ko.computed({
read: function () {
debugger;
return ko.utils.arrayFirst(self.ChangeControls(), function (item) {
if (item.Status() === productVersionId.ChangeControlId()) {
return item.ChangeControl();
}
});
},
write: function (value) {
console.log("Value i get " + value);
return value;
}
});
【问题讨论】:
-
这个有 jsfiddle 或 jsbin 吗?
-
不,我对此一无所知。但是你明白我的问题吗?
-
我正在努力关注它。是否要将左侧的更新值保存到数据库中以进行更改控制,同时仍仅在标签中显示描述而不是原始 id?
-
我只想显示已在组合框中选择的名称。我正确保存了id。只是我无法将列表中的值正确设置为组合框中选择的值
-
所以当左边的一个项目被选中时,他们改变了右边的框,只是左边的一个选定的行应该改变显示?