6

我正在使用 RPNiemeyer 的 kendo-knockout 库。我有一个剑道窗口,我在 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。在 kendo-knockout 文档中,有一些小部件的属性小部件,我猜这是关键,但我不确定如何使用它,因为没有示例。欢迎任何想法。谢谢!

4

2 回答 2

7

widget当您需要以提供的绑定选项不支持的方式与小部件交互时,应使用该参数。通常,这是最后的手段,但在这种情况下,这似乎是正确的选择。

你所做的就是将一个 observable 传递给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/

于 2012-12-15T15:06:12.107 回答
6

实际上,我通过将其粘贴在绑定处理程序中实现了与 Niemeyer 相同的效果:

 

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

不需要额外的绑定,但它确实绑定了您的“onOpen”事件。

于 2013-01-28T14:49:22.490 回答