Javascript 如何从viewmodel获取绑定根节点,以便在AJAX发布时在其上使用jQuery.blockUI?
我有一个DIV,以这种方式应用ko绑定时,我将其用作绑定根节点: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)。我想要的是这样的伪
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();
}
};