我在<tbody>上有一个自定义绑定处理程序,只有当用户拥有来自视图模型的适当权限时,才能应用该处理程序。此数据绑定允许用户拖放表中的元素以重新排序列表.
如果满足某些条件,是否可以有条件地绑定我的自定义绑定处理程序?
基本上我想:
<tbody data-bind="if (hasPermission){custom-binding: list}"></tbody>这种行为可以通过敲除来实现吗?我认为还有其他策略,比如有一个按钮,允许用户对表进行排序(只有在他拥有正确的权限时才会出现),但我想检查一下是否有其他方法。
谢谢。
编辑
我对我想出的解决方案并不满意,但它让我得到了我想要的结果:
<!--ko if: hasPermission-->
<tbody data-bind="foreach: list, sortableList: list">
@Html.Partial("_FilesTabTableBody")
</tbody>
<!-- /ko -->
<!--ko if: !hasPermission()-->
<tbody data-bind="foreach: list">
@Html.Partial("_FilesTabTableBody")
</tbody>
<!-- /ko -->本质上,我只是在两个地方复制HTML .它不是很漂亮,但它做的工作很简单。感谢大家的投入。
发布于 2014-04-23 16:47:45
自定义绑定的好处是您拥有完全的控制权。在自定义绑定中,可以添加另一个参数来控制绑定的行为。例如,您可以创建一个仅在另一个可观察到的为真的情况下才会执行的可见绑定:
var vm = function() {
var me = this;
me.canChangeVisible = ko.observable(true);
me.showMessage = ko.observable(true);
}
ko.applyBindings(new vm());HTML:
<div>
<div><input type="checkbox" data-bind="checked: canChangeVisible">Can Change Visible</input></div>
<div><input type="checkbox" data-bind="checked: showMessage">Show Message</input></div>
</div>
<div data-bind="makeVisible: showMessage, basedOn: canChangeVisible">Message</div>在您的自定义绑定中,请查看"basedOn“是否应该使用:
ko.bindingHandlers.makeVisible = {
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var bo = allBindings.get('basedOn');
var canChange = bo == null ? true : ko.unwrap(bo);
if( canChange )
ko.bindingHandlers.visible.update(element, valueAccessor, allBindings, viewModel, bindingContext);
}
};下面是一个完整的jsFiddle,展示了这一点。“显示消息”复选框的设置仅在选中“可以更改可见”时才会使用。
发布于 2014-04-23 15:54:26
你可以使用虚拟元素。
<!-- ko if: hasPermission -->
<tbody data-bind="custom-binding: list"></tbody>
<!-- /ko -->发布于 2014-04-23 15:50:46
用电脑..?
<tbody data-bind="custom-binding: safeList"></tbody>
vm.safeList = ko.computed(function() {
if (vm.hasPermission) return vm.list;
return undefined; // or whatever you do when user has no permission
});https://stackoverflow.com/questions/23249363
复制相似问题