【发布时间】:2017-01-07 13:05:19
【问题描述】:
我有一个基本的淘汰赛问题: 我有一个这种格式的对象列表:
[{ Name: "Colors1", Values: ["red", "yellow", "blue"] },
{ Name: "Colors2", Values: ["red", "pink", "blue"] },
{ Name: "Colors3", Values: ["black", "white", "green"] }]);
我想要一个带有颜色名称的下拉菜单。在选择更改时,值中的颜色应显示在文本框中。 当文本框中的颜色发生变化时,应立即更新整条记录。
这是我所拥有的:
<div>
<select data-bind="options:myitems, optionsText:'Name', optionsValue:'Name', optionsCaption:'Please select a color', value:selectedColor"></select>
<table>
<thead>
<tr>
<th>Color</th>
</tr>
</thead>
<tbody data-bind="foreach:listofColors()? ">
<tr>
<td><input data-bind="value:Value, event: { change : $parent.SaveUpdatedColors($root)?}" /></td>
</tr>
</tbody>
</table>
</div>
//----------------------------------- //
<script>
var viewModel= function() {
var self = this;
self.selectedColorChoice = ko.observable();
self.listofColors = ko.observableArray();
self.myitems = ko.observableArray(
[{ Name: "Colors1", Values: ["red", "yellow", "blue"] },
{ Name: "Colors2", Values: ["red", "pink", "blue"] },
{ Name: "Colors3", Values: ["black", "white", "green"] }]);
var getByName = function (items, name) {
return ko.utils.arrayFirst(items, function (item) {
return item.Name === name;
});
};
self.selectedColor.subscribe(function(item) //NOT WORKING
{
self.listofColors = ko.computed(function () {
var selColor = getByName(self.myitems(), self.selectedColor);
return selColor ? ko.utils.arrayMap(selColor.Values, function (item) {
return {
Name: item.Name,
Value: item.Value
};
}) : [];
}, this);
})
})
self.SaveUpdatedColors=function(fullRecord)
{ //logic to update}
}
ko.applyBindings(new viewModel());
</script>
我该如何进行?提前致谢。
【问题讨论】:
标签: c# knockout.js viewmodel