2016-04-22 5 views
0

私の問題のための実用的な解決策を見つけることができませんでしたが、私はそれが動作するように簡単な方法かもしれませんが、それを把握することはできません。ノックアウトエクステンダでのメソッドの手動呼び出し

私は、表示テキストとユーザーが値を入力できる入力を切り替えるliveEditorというエクステンダーを持っています。入力とテキストエリアでうまく動作しますが、datepickerで管理できませんでした。私はOKボタンをクリックしたとき

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

それは動作します:

<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:

は、ここに私のコード

HTMLを行きます。

ありがとうございました!

答えて

1

ここで、stopEditingメソッドを呼び出すにはどうすればよいですか?

観察できるので、valueAccessor()から入手可能です:イベントが発生した時のようにアクセスします

valueAccessor().stopEditing(); 

initが呼び出されたときの値を使用することが重要な場合は、それをavlueにクローズしているので、value.stopEditing()になります。

あなたのために他の二つの選択肢(しかし、私は上記の操作を行うと思う):

  • あなたはallBindingsから結合eventsにアクセスしてから、そのblur結合をつかむと、
  • あなたがそれを呼び出すことができます可能性がありblurイベントを起動するinput
+0

リピートをありがとう。 saveModelメソッドでエラーが発生したため、viewModelも送信しなければなりませんでした。メソッドは "this"(stopEditing関数内)には存在しません。 –

関連する問題