Knokout选择:按项目名称设置所选项目而不是值

时间:2015-06-15 09:26:19

标签: jquery select knockout.js

我有一个淘汰赛选择如下

可观察数组

issuingCountries

    0: 
       ObjectCoordinatorRegion: "EU"
       Country: "Australia"
       CountryId: 14
       Id: 1
   2: 
       ObjectCoordinatorRegion: "AU"
       Country: "Japan"
       CountryId: 16
       Id: 2

HTML

<select class="issuing_country" data-bind="options: issuingCountries,
                                           optionsText : 'Country',                               
                                           value:IssuingcountrySelected,
                                           optionsCaption:'---Select---',
                                         "
                        >
                        </select>

我的问题是,我手中有{Country:“Japan”},所以如何在下拉菜单中设置选定的特定项目。 到目前为止我已经尝试了

$('.issuing_country option[text="Japan"]').prop('selected', true); 

但失败了,让我知道另一种方法。 谢谢

1 个答案:

答案 0 :(得分:2)

在使用knockout时,你不应该尝试使用jQuery设置类似的东西 - 而是在viewmodel上完成所有操作。

您的<select>选项与issuingCountries observableArray绑定,所选值将绑定到IssuingcountrySelected observable。要自动选择一个选项,只需在viewmodel上设置属性,并且knockout将处理其余的选项:

//Assuming "Japan" is at index 2:
vm.IssuingcountrySelected(vm.issuingCountries()[2]);

如果您只知道要选择的选项的名称,首先您必须找到正确的项目,因此您需要一个功能:

function findCountryByName(name) {
    for (var x = 0; x < vm.issuingCountries().length; x++) {
        if (vm.issuingCountries()[x].Country == name)
            return vm.issuingCountries()[x];
    }
    return null;
}
vm.IssuingcountrySelected(findCountryByName("Japan"));