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;
マイケルは、これは先生、本当に便利です。 エラー:キャッチされていないReferenceError:バインディングを処理できません "メッセージを返す:{return randomize(docs)}"メッセージ:ランダム化が定義されていません。 –
バインディングで 'randomize'を利用できるようにするには、グローバル関数(' window.randomize = ... ')かビューモデルでなければなりません。 –
意味があります!私は月曜日にそれを打ち明けます。もう一度ありがとう、マイケル! –