我有一种情况,我动态地构建一个div容器,其中有其他html元素绑定到我的knockout视图模型。它可以解决我在我的挖空视图模型上调用一个需要重绘整个div的方法的问题。重绘淘汰赛停止工作后。
例如:
calendar += ('<div class="month-nav-container"><div class="nav-prev" data-bind="click: $root.showPreviousMonthOnPrevMonthBtnClick" ><<<</div><span class="month-name-calendar">' + monthNames[month] + '</span><div class="nav-next" data-bind="click: $root.showNextMonthOnNextMonthBtnClick" >>>></div></div>');
我构建了我的日历控件,当然这只是其中的一部分,但我希望你能得到一般的想法。
我的淘汰视图模型方法:
self.showPreviousMonthOnPrevMonthBtnClick = function () {
alert("prev");
var $calendar = $("#calendar");
$calendar.empty();
////// previous month
if (self.calendarDisplayDate.month == 0) {
$calendar.calendarWidget({ month: 12, year: self.calendarDisplayDate.year - 1 });
} else {
$calendar.calendarWidget({ month: self.calendarDisplayDate.month - 1, year: self.calendarDisplayDate.year});
}
}
在我的页面加载中,我构建了我的日历div,然后我将ko.applyBindings()调用到我的视图模型并且它可以工作。但是,当我点击上一个月的方法来调整需要根据正确的月份重绘日历的btn时,淘汰赛停止工作。我重绘了包含所有敲除绑定的整个父div。有谁知道我的问题的解决方案。我需要重新绘制内部有KO绑定的div,所以也许我正在寻找的是Knockout的某种绑定刷新方法?
答案 0 :(得分:19)
在这里找到解决方案:
How to clear/remove observable bindings in Knockout.js?
var element = $('#elementId')[0];
ko.cleanNode(element);
然后
ko.applyBindings(myVieModel, parentDiv)
答案 1 :(得分:0)
确保所有需要更新的html元素绑定到可观察的函数,即observablefoo而不是observablefoo()