2016-11-21 4 views
1

ich eine Funktion ausgelöst werden soll, wenn der Benutzer wählen einen anderen Wert aus einer Combobox <select>eine Funktion auslösen, wenn Wertänderung mit knockoutjs

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")); 

Was ich will ist, wenn Wertänderung in der Combobox ich möchte, dass dieser Parameter zu binden eine andere Funktion.

Aber in der Art, wie ich getan habe, habe ich einen Fehler:

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

Antwort

1

Subscribe nicht funktionieren, so nochIch benutze 0

Also, mit ideia von siddhearth zu bekommen ich den Wert von meinem var ausgewählt, kann ich den neuen Wert erhalten die $parent für $root

HTML

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

JS Ändern

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

Check binding context

1

Die erste, was zuerst ist Ihre Ansicht nach Modell echt vermasselt. Möglicherweise müssen Sie Änderungen an Variablennamen vornehmen, die in der Datenbindung verwendet werden, um mit denen im Ansichtsmodell übereinzustimmen. Ich hoffe, dass ich dich richtig verstehe. Sie möchten eine Methode auslösen, wenn sich der Wert der Combobox ändert. Dafür gibt es einen einfacheren Weg, Subscribe auf einer Observablen (Ihren Combobox-Wert) zu verwenden. Wenn sich der Wert Ihrer Combobox ändert, wird die Subscribe-Funktion ausgelöst. Die gewünschte Funktionalität wird in der subscribe-Funktion als Funktionskörper übergeben.

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. 
    }); 
} 

Referenzen der abonnieren check out: Knockout observables subscribe

Knockout options binding

+0

Ich habe das versucht und versuche es jetzt wieder, aber funktioniert nicht. Ich habe über die Subskription gelesen, aber aus irgendeinem Grund wurde die Subskribierung nicht ausgelöst, wenn ich den Wert in der Combobox ändere. – Adley

+0

@Adley Hier ist Link zur selben mit der Verwendung von subscribe: [link] (https://jsbin.com/yetefumiku/6/edit? Html, js, console, output) – Siddharth

+0

Ich habe diesen Code hinzugefügt, aber das funktioniert nicht auf meinem Projekt. Ich habe vergessen zu erwähnen, dass mein Projekt viele andere Skripte mit JS und Knockout hat. Ich weiß jetzt nicht wirklich warum, aber auf diese Weise funktioniert es nicht. – Adley

Verwandte Themen