我更新了小提琴。在这个小提琴中,我有 3 个 div。在中间的 div 中有循环出来的文本。当 div 很小时,我想取出该项目并将其放入另一个绑定到这样的选择类型的 observableArray 中。
<div data-bind="collection:{items:itemsThatFit,itemsDontFit:itemsDontFit">
<span data-bind="text:$data"></span>
</div>
<select data-bind="visible:itemsDontFit.length>0, options: itemsDontFit"></select>
在小提琴中,当您添加许多不适合的内容时,我希望将其移动到 itemsDontFit 数组中。我无法从正确的角度解决这个问题,需要一些帮助。
我知道小提琴没有任何解决方案。我只是想表明 div 内的信息很大,我想将它转移到一个选择中。
我也知道我可以使用样式绑定来获取宽度,但我的 viewModel 上不需要它,所以我只想将它放在我的 bindingHandler 中。
如何让 bindingHandler 充当具有 items 值的 foreach?
这是我现在的测试
ko.bindingHandlers.collection = {
init: function (element, valueAccessor) {
var value = valueAccessor();
ko.utils.unwrapObservable(value);
var $elm = $(element);
//here I want a foreach on the itemsThatFit
//maybe add the select in code here?
},
update: function (element, valueAccessor) {
var value = valueAccessor();
ko.utils.unwrapObservable(value);
var $elm = $(element);
//the div width
var containerWidth = $elm.width();
//the children width
var childSum = 0;
$elm.children().each(function() {
childSum + $(this).width());
});
if(childSum>containerWidth){
//move last item to itemsDontFit
}
}};