尝试使用foreach命令列表并将列表项随机洗牌。我创建了一个函数(randomOrder)并将其用于绑定在foreach项目上。 似乎没有任何工作。在Knockout.js中随机化Foreach列表项
HTML:
<ol data-bind="foreach: { data: docs, randomOrder: true} ">
<li class="result" data-bind="component: { name: 'physicianreferral.docresult', params: { doc: $data } }"></li>
</ol>
JS:
ko.bindingHandlers.randomOrder = {
init: function (elem, valueAccessor) {
// Build an array of child elements
var child = ko.virtualElements.firstChild(elem),
childElems = [];
while (child) {
childElems.push(child);
child = ko.virtualElements.nextSibling(child);
}
// Remove them all, then put them back in a random order
ko.virtualElements.emptyNode(elem);
while (childElems.length) {
var randomIndex = Math.floor(Math.random() * childElems.length),
chosenChild = childElems.splice(randomIndex, 1);
ko.virtualElements.prepend(elem, chosenChild[0]);
}
}
};
ko.virtualElements.allowedBindings.randomOrder = true;
迈克尔,这是真正有用的,先生。我认为我正确实现了你的想法,但由于某种原因我得到这个错误: 错误:Uncaught ReferenceError:无法处理绑定“foreach:function(){return randomize(docs)}”消息:randomize未定义 –
对于'randomize'在绑定中可用,它应该是全局函数('window.randomize = ...')或视图模型。 –
有道理!星期一我会出手。再次感谢迈克尔! –