Ручной вызов метода в расширителе выбивания

Я не мог найти какие-либо рабочие решения для моей проблемы, однако я знаю, что это может быть тривиальным способом заставить это работать, но я не могу понять это.

У меня есть расширитель под названием 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
Другие вопросы по тегам