我有一个div,它是使用knockout foreach语法绑定的数据。
<div id="myDiv" data-bind="foreach: { data: myData }, myCustomBinding: { param: paramname }">
<a id="myLink" class="myLink" data-bind="text: label"></a>
</div>
myData是一个ObservableArray,用于保存数据。我在myData上有一个淘汰订阅如下:
myData.subscribe(function () {
if (myData().length > 0) {
resizeDiv();
}
});
在resizeDiv()函数中,我试图从这个div中删除一些链接,并移动到另一个隐藏的div,如果所有控件组合的大小都大于div宽度。但问题是此时控制宽度不可用。稍微调整浏览器大小后,在DOM中刷新控件宽度。我添加了一个窗口调整大小事件,它调用相同的resizeDiv()方法。
$(window).on('resize', function () {
resizeDiv();
});
不确定我是否能够表达我的问题/疑虑。如果您需要任何进一步的信息,请告诉我。
更新 这是小提琴http://jsfiddle.net/2m3Jk/7/。但是绑定处理程序并没有在小提琴中触发。在我的应用程序中,绑定处理程序正在触发,如果我调整窗口大小,菜单项将从一个div移动到另一个div。但不是在页面加载上。
答案 0 :(得分:1)
我建议你不要在普通的javascript中使用dom操作,如果它在渲染过程中与knockout竞争。也许您可以使用afterRender绑定来调用resize函数:http://knockoutjs.com/documentation/template-binding.html#note-4-using-afterrender-afteradd-and-beforeremove