Ручной вызов метода в расширителе выбивания
Я не мог найти какие-либо рабочие решения для моей проблемы, однако я знаю, что это может быть тривиальным способом заставить это работать, но я не могу понять это.
У меня есть расширитель под названием liveEditor, который переключается между отображаемым текстом и вводом, где пользователь может поместить значение. Это хорошо работает с входными данными и текстовыми областями, но я не мог справиться с этим, например, с DatePicker.
Вот мой код
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?
});
}
}
};
Это работает, когда я нажимаю кнопку ОК.
Заранее благодарю за любую помощь!
1 ответ
что я должен написать здесь, чтобы вызвать метод stopEditing?
Наблюдаемое доступно от valueAccessor()
, так:
valueAccessor().stopEditing();
Это будет доступ к нему с момента возникновения события. Если важно, чтобы вы использовали значение, как это было, когда init
был назван, вы закрываете это в avlue
так было бы value.stopEditing()
,
Две другие альтернативы для вас (но я думаю, я бы сделал выше):
- Вы можете получить доступ к
events
привязка отallBindings
а затем и захватить егоblur
обязательна и называть это - Вы могли бы вызвать
blur
событие наinput