首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KnockoutJs中的条件数据绑定

KnockoutJs中的条件数据绑定
EN

Stack Overflow用户
提问于 2014-04-23 15:48:22
回答 3查看 1.1K关注 0票数 0

我在<tbody>上有一个自定义绑定处理程序,只有当用户拥有来自视图模型的适当权限时,才能应用该处理程序。此数据绑定允许用户拖放表中的元素以重新排序列表.

如果满足某些条件,是否可以有条件地绑定我的自定义绑定处理程序?

基本上我想:

代码语言:javascript
复制
<tbody data-bind="if (hasPermission){custom-binding: list}"></tbody>

这种行为可以通过敲除来实现吗?我认为还有其他策略,比如有一个按钮,允许用户对表进行排序(只有在他拥有正确的权限时才会出现),但我想检查一下是否有其他方法。

谢谢。

编辑

我对我想出的解决方案并不满意,但它让我得到了我想要的结果:

代码语言:javascript
复制
        <!--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 .它不是很漂亮,但它做的工作很简单。感谢大家的投入。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-23 16:47:45

自定义绑定的好处是您拥有完全的控制权。在自定义绑定中,可以添加另一个参数来控制绑定的行为。例如,您可以创建一个仅在另一个可观察到的为真的情况下才会执行的可见绑定:

代码语言:javascript
复制
var vm = function() {
    var me = this;

    me.canChangeVisible = ko.observable(true);
    me.showMessage = ko.observable(true);
}

ko.applyBindings(new vm());

HTML:

代码语言:javascript
复制
<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“是否应该使用:

代码语言:javascript
复制
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,展示了这一点。“显示消息”复选框的设置仅在选中“可以更改可见”时才会使用。

票数 2
EN

Stack Overflow用户

发布于 2014-04-23 15:54:26

你可以使用虚拟元素。

代码语言:javascript
复制
<!-- ko if: hasPermission -->
<tbody data-bind="custom-binding: list"></tbody>
<!-- /ko -->
票数 2
EN

Stack Overflow用户

发布于 2014-04-23 15:50:46

用电脑..?

代码语言:javascript
复制
<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
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23249363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档