手动调用敲除扩展器中的方法

时间:2016-04-22 10:34:09

标签: javascript knockout.js kendo-datepicker

我找不到任何可行的解决方案来解决我的问题,但是我知道这可能是让它运转起来的一种微不足道的方法,但我无法弄清楚。

我有一个名为liveEditor的扩展器,它在显示文本和用户可以输入值的输入之间切换。它适用于输入和textareas,但我无法使用ie 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?
            });
        }
    }
};

单击OK按钮时可以正常工作。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

我应该在这里写什么来调用stopEditing方法?

可以从valueAccessor()获得可观察量,所以:

valueAccessor().stopEditing();

这将在事件发生时访问它。如果您在调用init时使用该值时非常重要,那么您将关注avlue中的值,因此它将是value.stopEditing()。< / p>

另外两种选择(但我想我会做上述事情):

  • 您可以从events访问allBindings绑定,然后获取其blur绑定并将其调用
  • 您可以在blur
  • 上触发input个活动