2012-12-15 9 views
6

私はRPNiemeyerの剣道ノックアウトライブラリーを使用しています。私はこのようなダイアログをセンタリングするために使用さ剣道ノックアウト:どのようにウィンドウを開く

<div data-bind="kendoWindow: { isOpen: isOpen, title:'States', width: 600, height: 150, modal: true, resizable: false, actions: ['Maximize', 'Close'] }" > </div> 

:私は、私はHTMLでこのように使用剣道ウィンドウを持って

$('#productionStates').data("kendoWindow").center(); 

しかしcenterがメソッドであるように私は、マークアップにそれを渡すことはできませんこのようにcenter: true。剣道のドキュメントでは、いくつかのウィジェットのためのプロパティウィジェットがありますが、これがキーだと思いますが、例がないので使用方法がわかりません。どんなアイディアも大歓迎です。ありがとう!

答えて

7

widgetパラメータは、指定されたバインディングオプションでサポートされていない方法でウィジェットと対話する必要がある場合に使用するためのものです。通常、これは最後の一種ですが、この場合は正しい選択であるように見えます。

あなたが行うことは、観察可能なパラメータをwidgetパラメータに渡すことで、実際のウィジェットで満たされます。次に、ビューモデルからメソッドを呼び出すことができます。

のような何か:

var ViewModel = function() { 
    this.isOpen = ko.observable(false); 
    //center it if it is opened 
    this.isOpen.subscribe(function(newValue) { 
     if (newValue) { 
      this.myWidget().center();   
     } 
    }, this); 

    //hold the widget 
    this.myWidget = ko.observable(); 
}; 

次に、マークアップに:ここ

<div data-bind="kendoWindow: { isOpen: isOpen, visible: false, modal: true, widget: myWidget }"> 
    ... 
</div>​ 

サンプルは:http://jsfiddle.net/rniemeyer/gNgDm/

+0

ありがとうございます!この機能をライブラリに追加するつもりですか?私の経験では、モーダルウィンドウが必要なときはいつでも、それを中心にする必要があります。常に明示的にメソッドを呼び出すロジックを書くのはなぜですか? – Mdb

+0

'center' /' uncenter'という概念がなく、ウィンドウがもはや中央に置かれていない(falseに設定されている)か、現在は中央に置かれている(真に設定されている)かどうかを知るイベントはないので、少し難しいです。剣道のUIがサポートする設定オプションでなければならないようです。私はもう少し考えなければならないでしょうが、通常の "結合"パターンにはあまり合いません。私は確かにどのようにもっと便利になるか見ることができます。 –

6

は私が実際に結合ハンドラでそれを貼り付けることにより、ニーマイヤーと同じ効果を達成しました:

 

    ko.bindingHandlers.kendoWindow.options = { 
     open: function() { this.element.data('kendoWindow').center(); } 
    }; 

追加のバインディングは必要ありませんが、 "onOpen"イベントを縛り付けません。

関連する問題