knockout.js(2.2.0)如何使用下拉菜单从Json数组中获取数据



工作演示

我面临以下问题:
有一个json数组:

self.customExportFileArray = ko.observableArray([
{
"IncludeInExportConversionTypesSelectList" :
[
{
"ConversionGroupID" : 1,
"Title" : "Quote Start - Auto"
},
{
"ConversionGroupID" : 2,
"Title" : "Quote Finish - Auto"
},
{
"ConversionGroupID" : 5,
"Title" : "Sales Data"
}
],
"ChooseFromConversionTypesSelectList" : [],
"FileName" : "Template1",
"FileFormat" : "Excel",
"FilterSettings" : true,
"ComparisonMetrics" : false
},
{
"IncludeInExportConversionTypesSelectList":
[
{
"ConversionGroupID" : 1,
"Title" : "Quote Start - Auto"
},
{
"ConversionGroupID" : 5,
"Title" : "Sales Data"
}
],
"ChooseFromConversionTypesSelectList":
[
{
"ConversionGroupID" : 2,
"Title" : "Quote Finish - Auto"
}
],
"FileName" : "Template2",
"FileFormat" : "CSV",
"FilterSettings" : false,
"ComparisonMetrics" : true
}
]);
}


我有一些HTML代码,其中包含一个下拉列表、文本框、几个单选按钮和两个列表控件。因此,重点是:下拉列表中包含的Item应与customExportFileArray数组的长度一样多,Item name(optionsText)应为数组中的FileName属性。(看起来现在有效了)。接下来,如果从下拉列表中更改项目,假设Template1文件名文本框应由数组(Template1)中的FileName属性填充,Excel单选按钮应选中,保留筛选器设置应选中,Compatison Metrics应取消选中,"要从中选择的转换类型"应包含IncludeInExportConversionTypesSelectList数组的列表(文本=标题)
但如果在我的HTML代码中看到我做错了什么,但不知道具体是什么。它不会通过从下拉列表中更改Item来加载特定的数据,但我认为我做这一切的方式都是正确的
附加问题:如何保存对特定Item数组的更改(我的意思是,例如,您更改了名称或更改了选中的单选按钮)。
如有任何帮助,我们将不胜感激

提前感谢

工作演示

您需要将下拉列表的值绑定到一个名为"SelectedTemplate"的可观察属性,以存储所选值,然后将可变字段绑定到所选对象:

<select data-bind="options: customExportFileArray, optionsText: function(item) { return item.FileName }, value: selectedTemplate">
<input type="text" data-bind="value: selectedTemplate().FileName"/>
self.selectedTemplate = ko.observable();
self.customExportFileArray = ko.observableArray([
{
....

我修改了你的jsfiddle如下:http://jsfiddle.net/ptmwr/11/

正如您所看到的,下拉列表的值绑定现在指向这个新属性,我不得不更改optionstext绑定的方式,以将对象作为值进行处理。

编辑:

此外,您还试图将布尔值绑定到RadioButton的已检查属性,而它们并不是真正为之设计的。如果你想绑定到一个布尔属性,那么你应该使用复选框控件,因为它要么打开要么关闭

希望这能有所帮助!

最新更新