2016-04-22 54 views
0

我找不到任何工作解決方案,但我意識到這可能是一個微不足道的方法,但我無法弄清楚。手動調用挖空擴展器的方法

我有一個名爲liveEditor的擴展器,它在顯示文本和用戶可以輸入值的輸入之間切換。它與輸入和textareas很好,但我不能用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

我應該在這裏寫什麼來調用stopEditing方法?

可觀察可從valueAccessor(),所以:

valueAccessor().stopEditing(); 

這將訪問它的事件發生的時間。如果重要的是您使用的值是init被調用時的值,那麼您的結果就是avlue,因此它將是value.stopEditing()。你(但我想我會做以上)

其他兩個備選方案:

  • 你可以訪問eventsallBindings綁定,然後搶了blur綁定和調用它
  • 你可以在input上觸發blur事件
+0

感謝您的重播。我不得不發送viewModel,因爲我在saveModel方法中存在錯誤,在「this」中不存在(在stopEditing函數中) –