1

我有一个使用淘汰赛 foreach 语法绑定数据的 div。

<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。但不是在页面加载时。

4

1 回答 1

1

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

于 2014-08-04T00:51:40.037 回答