0

我已经使用带有敲除的自定义绑定来显示 jqueryui 对话框,但我想使用敲除组件功能。

所以,我想写一些类似的东西:

<window params="isVisible: isVisible">
    //there will be some html
</window>

后来在代码中的某个地方:

self.isVisible(true); //That would open window
//or
self.isVisible(false); //That would close window

问题是我不知道如何应用 $(element).dialog。当我注册淘汰组件时,我只能获取该组件的容器元素,而不能获取注入元素。

ko.components.register('window', {
        viewModel: {
            createViewModel: function(params, componentInfo) {
                // - 'params' is an object whose key/value pairs are the parameters
                //   passed from the component binding or custom element
                // - 'componentInfo.element' is the element the component is being
                //   injected into. When createViewModel is called, the template has
                //   already been injected into this element, but isn't yet bound.
                // - 'componentInfo.templateNodes' is an array containing any DOM
                //   nodes that have been supplied to the component. See below.

                // Return the desired view model instance, e.g.:
                return new MyViewModel(params);
            }
        },
        template: ...
    });

因此,componentInfo.element 是父节点,如果我使用 $(componentInfo.element) 应用对话框,我将设置为对话框父节点,那么我的窗口标签将是:

<div><!-- Dialog will be applyed there-->
    <window params="isVisible: isVisible">
        //there will be some html
    </window>
</div>

我认为它会起作用,但是这里不需要额外的 div ......或者这是完成工作的唯一方法?

什么是 knockout.components 方法来做到这一点?谢谢。

4

1 回答 1

0

当我想构建一个 Knockout 组件以使用 Bootstrap v2 'modal' 功能托管一个对话窗口时,我也有类似的要求。我在页面的 viewModel 中使用了一个可观察的布尔值,最初设置为 false。在组件初始化之后,没有一种简单的方法可以与组件进行通信,除非通过参数传入 observables。

这个 observable 作为参数传递给参数中的一个<dialog-window>组件,例如

<dialog-window params="visible: showDialog">[content]</dialog-window>

data-bind='visible: YourParam'然后,这对“模态”对话框使用了特殊的绑定处理程序,但在您的情况下,您可以使用属性直接绑定它。

然后主页可以简单地调用showDialog(true)以使对话框可见。

希望这可以帮助。

于 2015-08-18T10:29:50.673 回答