当用户从组合框<select>中选择其他值时,我想触发一个函数

的HTML

<div class="wrapper wrapper-content" id="appGradeHorariaCompleta">
   <select class="form-control m-b" data-bind="options: Curriculos,optionsText:'Text',optionsValue:'Value',optionsCaption:'Selecione', value: CurriculoSelected, event:{ change: $parent.CurriculosChanged}"></select>
</div>


JS

function PainelViewModel() {
    var self = this;
    self.Curriculos = ko.observableArray([]);
    self.CurriculosChanged = (function (curriculo) {
        console.debug(curriculo);
    });
}

function CurriculoViewModel() {
    var self = this;
    self.Id = ko.observable(0);
    self.Value = ko.observable('');
    self.Selected = ko.observable(0);
}
...GET DATA...
...
..
.
$(data.CurriculoComboBox).each(function (index, item) {
    var model = new CurriculoViewModel();
    model.myvalues = item.myValues;
    painelVM.Curriculos().push(model);
});

ko.applyBindings(painelVM, document.getElementById("appGradeHorariaCompleta"));


我想要的是当组合框中的值更改时,我想获取此参数以绑定另一个函数。

但是在完成过程中,我遇到了一个错误:

 Unable to process binding "event: function (){return { change:$parent.HabilitacoesCursosChanged} }

最佳答案

首先,您的视图模型确实很混乱。您可能需要使用数据绑定中使用的变量名进行更改,以使其与viewmodel中的变量名匹配。我希望我对你正确。您想要的是在组合框的值更改时触发一个方法。为此,有一种更简单的方法可以在可观察(您的组合框值)上使用订阅。因此,只要组合框的值发生变化,就会触发订阅功能。所需的功能作为功能主体传递到订阅函数内部。

HTML:

<div class="wrapper wrapper-content" id="appGradeHorariaCompleta">
 <select class="form-control m-b" data-bind="options:Curriculos, optionsText:'Text',optionsValue:'Value',optionsCaption:'Selectone', value: CurriculoSelected"></select>
</div>


Javascript:

function CurriculoViewModel() {
    var self = this;
    self.Curriculos = ko.observableArray([]);
    self.CurriculoSelected = ko.observable('');
    self.CurriculoSelected.subscribe(function(value) {
        // Your change functionality goes here combobox.
    });
}


参考资料检查订阅:
Knockout observables subscribe

Knockout options binding

关于javascript - 使用Knockout.js更改值时触发函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40726196/

10-12 13:06