6

RPNiemeyerの剣道ノックアウトライブラリを使用しています。私はhtmlでこのように使用する剣道ウィンドウを持っています:

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

私は次のようにダイアログを中央に配置していました。

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

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

4

2 に答える 2

7

The widget parameter is intended to be used when you need to interact with a widget in a way that is not supported by the provided binding options. Normally, this is kind of a last resort, but in this case it looks like it would be the right choice.

What you do is pass an observable into the widget parameter and it will get filled with the actual widget. Then, you can call methods off of it from your view model.

Something like:

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

Then, in markup:

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

Sample here: http://jsfiddle.net/rniemeyer/gNgDm/

于 2012-12-15T15:06:12.107 に答える
6

Niemeyer をバインディング ハンドラーに貼り付けることで、実際に同じ効果を実現しました。

 

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

追加のバインディングは必要ありませんが、「onOpen」イベントを結び付けます。

于 2013-01-28T14:49:22.490 に答える