0

我找不到任何可行的解决方案来解决我的问题,但是我知道这可能是使其正常工作的一种微不足道的方法,但我无法弄清楚。

我有一个名为 liveEditor 的扩展器,它在显示文本和用户可以输入值的输入之间切换。它适用于输入和文本区域,但我无法使用日期选择器来管理它。

这是我的代码

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

当我单击“确定”按钮时它可以工作。

提前感谢您的帮助!

4

1 回答 1

1

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

observable 可从 获得valueAccessor(),因此:

valueAccessor().stopEditing();

这将在事件发生时访问它。如果您使用调用时的值很重要,那么init您将关闭它 in avlue,所以它会是value.stopEditing().

您还有另外两个选择(但我想我会这样做):

  • 您可以eventsallBindings然后访问绑定并获取它的blur绑定并调用它
  • 您可以blurinput
于 2016-04-22T10:40:04.473 回答