淘汰赛:DOM在调整大小之前不会更新

时间:2013-08-13 09:57:05

标签: jquery knockout.js resize

我有一个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。但不是在页面加载上。

1 个答案:

答案 0 :(得分:1)

我建议你不要在普通的javascript中使用dom操作,如果它在渲染过程中与knockout竞争。也许您可以使用afterRender绑定来调用resize函数:http://knockoutjs.com/documentation/template-binding.html#note-4-using-afterrender-afteradd-and-beforeremove