Knockout寄存器插入元素与其他功能

时间:2013-07-10 10:00:00

标签: javascript knockout.js

我正在使用Knockout为图像数组显示一些标签。每个标签都有一个弹出窗口,提供有关标签的更多信息。元素使用以下方式在弹出类中注册:

function RegisterCharacterPopups() {
    $('[data-characterid]').each(function() {
        var cId = $(this).data('characterid');
        var placement = $(this).data('position');
        if (placement == null || placement == undefined) {
            placement = "top-center";
        }
        $(this).PopUp({
            url: "/Ajax/CharacterPop/" + cId,
            position: placement,
        });
    });
}

我已将此添加到包含标记的视图模型的构造函数中:

// Hook on to update of Tags
ko.computed(() => {
    var test = this.Tags();
    RegisterCharacterPopups();
    console.log("Tags updated");
});

我可以看到方法已执行,但标签未注册弹出窗口。如果它强制标签再次更新,它会工作吗! 我认为问题是这个方法在第一次执行之前,元素都在html之前。 我该如何解决这个问题,所以它会在执行之前等待插入元素?

1 个答案:

答案 0 :(得分:0)

解决方案:自定义绑定

ko.bindingHandlers['tagpop'] = {
    init: function (element, valueAccessor, allBindings, vm, context) {
        var data = valueAccessor();
        $(element).PopUp({
            url: "/Ajax/CharacterPop/" + data.id,
            position: data.placement,
        });

    },
    update: function (element, valueAccessor) {
    }
};