我正在使用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之前。 我该如何解决这个问题,所以它会在执行之前等待插入元素?
答案 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) {
}
};