我一直使用Harvest's Chosen dropdown,它要求在<select>项目上调用一些js。现在,我要使用淘汰赛来呈现我的选择列表。

这是用于在“选择的”下拉列表中转换标准下拉列表的代码

$(dropdownSelectorOrElement).Chosen()


我需要知道Knockout何时完成渲染<select>才能调用上面的代码:可能,回调函数应该引用<select>本身,这样我就可以在不使用选择器的情况下通过。

但是,淘汰赛公开了optionsAfterRender回调(记录为here:请参见“注释2”):


每次呈现选项时都会调用optionsAfterRender
optionsAfterRender仅提供对option元素的引用


我完全需要类似optionsAfterRender的东西,但是仅当整个<select>完成渲染时才调用。淘汰赛有这样的东西吗?

我准备了一个jsfiddle来说明optionsAfterRender

最佳答案

我已经通过this question上的此自定义绑定解决了。

ko.bindingHandlers.chosen = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {

        $(element).chosen();
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var value = ko.unwrap(valueAccessor()); // - see comment
        $(element).trigger("liszt:updated");
    }
};


请注意,如果您不使用ko.unwrap,则更新功能将不会触发,因为this问题中已告知我有关此问题的信息。

07-24 17:43