Ich konnte keine funktionierenden Lösungen für mein Problem finden, aber ich weiß, dass es eine triviale Art ist, es zum Laufen zu bringen, aber ich kann es nicht herausfinden.Manueller Aufruf einer Methode in Knockout Extender
Ich habe einen Extender namens LiveEditor, der zwischen einem Anzeigetext und einem Eingang umschaltet, wo der Benutzer einen Wert eingeben kann. Es funktioniert gut mit Eingaben und Textareas, aber ich konnte es nicht mit datypicker verwalten.
geht hier mein Code
HTML:
<div data-bind="liveEditor: Date">
<span class="view" data-bind="text: Date, event: {click: Date.edit}">15.04.2016</span>
<span data-bind="event: { click: Date.stopEditing }" class="ok"></span>
<input value="15.04.2016" data-bind="datetime: Date, event: {blur: Date.stopEditing}" />
</div>
JS:
ko.extenders.liveEditor = function (target) {
target.editing = ko.observable(false);
target.edit = function() {
target.editing(true);
};
target.stopEditing = function() {
target.editing(false);
//save
this.saveModel(); //run a method on viewmodel
};
return target;
};
ko.bindingHandlers.datetime = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext){
var value = valueAccessor();
var $el = $(element);
if (ko.isObservable(value)){
$el.data('kendoDatePicker').on('close', function(e,dataItem){
// what should I write here to call a stopEditing method?
});
}
}
};
Es funktioniert, wenn ich auf OK-Schaltfläche klicken.
Vielen Dank im Voraus für jede Hilfe!
Danke für die Wiederholung. Ich musste auch viewModel senden, weil ich einen Fehler bei der saveModel-Methode habe, die in "this" nicht existiert (in stopEditing-Funktion) –