【问题标题】:Kendo UI grid custom filter using data-binding on checkbox使用复选框上的数据绑定的 Kendo UI 网格自定义过滤器
【发布时间】:2014-04-18 00:24:32
【问题描述】:

简而言之,这就是我想要实现的目标:

使用复选框添加自定义过滤器的能力将自定义过滤器值应用于true或false以外的kendo ui网格。

这是我的自定义过滤器模板:

<div id="orderNumberFilterTemplate">
    <input type="hidden" data-bind="value:logic" value="or" />
        <label for="customerOrders" title="Show only orders going directly to the customer.">
            <input type="checkbox" class="k-checkbox" id="customerOrders" data-bind="checked:filters[1].value" name="orderTypes" value="6" />Direct to customer
        </label><br />
        <label for="galleryOrders" title="Show only orders going back to the store.">
            <input type="checkbox" class="k-checkbox" id="storeOrders" data-bind="checked:filters[2].value" name="orderTypes" value="5" />Direct to store
        </label><br />
        <label for="stockOrders" title="Show only restocking orders.">
            <input type="checkbox" class="k-checkbox" id="stockOrders" data-bind="checked:filters[3].value" name="orderTypes" value="3" />Stock orders
        </label><br />
</div>

这是我的自定义过滤功能:

function orderNumberFilter(element) {           
        element.after('<div>' + $('#orderNumberFilterTemplate').html() + '</div>');
};

这是我对网格的过滤功能的应用:

columns: [
    { 
        field: 'orderNumber', 
        title: 'Order Number', 
        filterable: {
            ui: orderNumberFilter,
        }
    }
]

我在这里追求的是,​​当有人勾选复选框时,我希望使用 { field: 'myfield', operator: 'startswith', value: 6 } 更新过滤器,但作为一个复选框,它会自动更新它们具有值:选中时为 true。有没有办法创建自定义过滤器而不是指定值而不是复选框 true 或 false 到过滤器。

另外,是否可以应用一个绑定属性来指定使用哪种运算符,因为我真的很想让剑道的标准文本框过滤器正常工作,但下面的这些复选框也使用不同的运算符应用于文本框的那个。

【问题讨论】:

    标签: javascript jquery data-binding kendo-ui kendo-grid


    【解决方案1】:

    是的,复选框值是truefalse,但您可以添加一些额外的信息,添加data-xyz 属性,然后询问xyz

    例子:

    <label for="customerOrders" title="Show only orders going directly to the customer.">
        <input type="checkbox" class="k-checkbox" id="customerOrders" data-bind="checked:filters[1].value" name="orderTypes" data-value="6" />
        Direct to customer
    </label>
    

    我已将您的 value 替换为 data-value。现在,我可以这样做了:

    function orderNumberFilter(element) {           
        var value = $(element).data("value");
        ...
    };
    

    这里的例子:http://jsfiddle.net/OnaBai/cY9Wg/

    【讨论】:

    • 问题还在于将其用作 Kendo UI 网格过滤器,您的回答虽然有帮助 - 不要误会我的意思,但没有帮助,我需要这两个工作。如果我要像您一样提取值,我知道有一些方法可以将过滤器应用于网格。如果我按照您在小提琴中的建议进行操作,那么它会在您勾选框后立即应用过滤器,这不是一个选项,我需要它与网格无缝协作,即仅在用户单击应用时应用过滤器弹出窗口上的按钮。
    • 如果我连接到应用按钮上的单击事件并获取所有过滤器并将它们发送到数据源,则会发生以下两种情况之一:如果另一列具有标准 Kendo 放置的过滤器,并且具有实际值在它上面,然后 kendo 向数据源重新发送一个过滤器命令 - 在我发送一个过滤器之后没有应用我的过滤器,因此发出了两个请求,并且网格最终只应用了标准的。
    • 如果没有其他剑道标准过滤器有值,那么只会发送一个请求 - 我使用自定义过滤器应用的请求,这很好,但一旦您使用标准就无法正常工作过滤器:(
    • 理想情况下,我希望它像标准的 Kendo 网格过滤器一样工作,但我对它们或 MVVM 的了解还不够,无法让绑定工作并让 Kendo 认识到某些事情发生了变化在此过滤器弹出的过滤器中。我希望 MVVM 在与输入元素绑定的过滤器中有一个标志或其他东西,以便知道它们何时被更改,以便它知道重新应用过滤器。
    • 我很迷茫你(最终)想要达到的目标。我试图解决复选框中 values 的问题,但似乎您的问题是构建一个过滤器(与其他过滤器增量兼容)并且可以通过网格中的复选框进行选择。对吗?
    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 2023-03-23
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多