AfterRender在foreach模板的容器上触发

时间:2011-06-12 15:49:21

标签: knockout.js

我有一个gridview,在从UpdateFromJS调用绑定和更新后,我想要斑马条纹。

该模板使用的是foreach数据绑定,但我不想在AfterRender事件上对其进行条带化处理,因为它会在每一行上被调用。

我需要它来触发整个网格的渲染。

1 个答案:

答案 0 :(得分:4)

这是一个帖子,其中描述了过去我尝试处理此问题的方法:https://groups.google.com/d/topic/knockoutjs/cJ2_2QaIJdA/discussion

基本上,我们添加一个绑定来进行条带化。绑定将在模板绑定后指定,如:

<ul data-bind="template: { name: 'itemsTmpl', foreach: items }, stripe: items, evenClass: 'light', oddClass: 'dark'"></ul>

绑定看起来像这样:

//separate options in binding
ko.bindingHandlers.stripe = {
    update: function(element, valueAccessor, allBindingsAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()); //creates the dependency
        var allBindings = allBindingsAccessor();
        var even = allBindings.evenClass;
        var odd = allBindings.oddClass;

        //update odd rows
        $(element).children(":nth-child(odd)").addClass(odd).removeClass(even);
        //update even rows
        $(element).children(":nth-child(even)").addClass(even).removeClass(odd);;
    }
}

以下是具有此绑定和其他两个类似替代方案的示例:http://jsfiddle.net/rniemeyer/HJ8zJ/。一个将选项直接传递到stripe绑定,另一个包装模板绑定,因此您只需指定一个绑定。