Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从viewmodel获取绑定根节点,以便在AJAX发布时在其上使用jQuery.blockUI?_Javascript_Html_Knockout.js_Jquery Blockui - Fatal编程技术网

Javascript 如何从viewmodel获取绑定根节点,以便在AJAX发布时在其上使用jQuery.blockUI?

Javascript 如何从viewmodel获取绑定根节点,以便在AJAX发布时在其上使用jQuery.blockUI?,javascript,html,knockout.js,jquery-blockui,Javascript,Html,Knockout.js,Jquery Blockui,我有一个DIV,以这种方式应用ko绑定时,我将其用作绑定根节点: ko.applyBindings(viewModel, document.getElementById('myContainerDiv')); 我为每种viewmodel类型定义了一个通用的post方法,使用通用的ajax处理等。在这种方法中,我希望访问绑定根节点,因此在这种情况下,使用“myContainerDiv”的DIV可以使用一些加载微调器 我检查了文档,但只找到了“反向”操作(ko.dataFor)。我想要的是这样的伪

我有一个DIV,以这种方式应用ko绑定时,我将其用作绑定根节点:

ko.applyBindings(viewModel, document.getElementById('myContainerDiv'));
我为每种viewmodel类型定义了一个通用的
post
方法,使用通用的ajax处理等。在这种方法中,我希望访问绑定根节点,因此在这种情况下,使用“myContainerDiv”的DIV可以使用一些加载微调器

我检查了文档,但只找到了“反向”操作(
ko.dataFor
)。我想要的是这样的伪代码:

BaseViewModel.prototype.post = function(url, options) {
    // this refers to my actual viewmodel

    var element = ....... get the binding root node for 'this'
    element.showLoading();
    ....
    // ajax stuff
    .... 
    element.hideLoading();
};

编辑:我正在使用jQuery.blockUI插件来显示/隐藏元素上方的加载面板,因此它不仅仅是将加载DIV的可见属性绑定到可观察属性。

我设法实现了jQuery.blockUI插件的自定义绑定,并将容器DIV与模型的IsLoading属性绑定在一起。在AJAX回调期间,我将IsLoading observable设置为true

<div data-bind="blockUI: IsLoading">
    ...
</div>

感谢您的基本想法。

为什么不在viewmodel中使用布尔可观测值,并使用“可见”绑定来控制加载消息/状态的可见性?将视图模型与DOM分离是Knockout的关键目标之一(IMO)。我不想在每个绑定了AJAX可更新视图模型的DIV中都放置一个加载面板。但无论如何,我喜欢这个想法,我将尝试在容器DIV上使用一些自定义绑定。此外,我正在使用jQuery.blockUI插件加载面板,所以这不仅仅是可视性。不是有$root吗?或元素=$parents[$parents.length-1]
ko.bindingHandlers.blockUI = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        if (value)
            $(element).block();
        else 
            $(element).unblock();
    }
};