У меня есть большой объект данных, который генерирует таблицу с большим количеством выпадающих меню. Это происходит навсегда, поэтому я пытаюсь ускорить рендеринг таблицы, не отбрасывая все выпадающие меню при начальной загрузке. Вместо этого я просто хочу отображать каждое меню по требованию/клику.
// HTML Element
<button class="btn dropdown-toggle" data-toggle="dropdown" data-bind="click: getTags">Tag</button>
<ul class="dropdown-menu">
// Some HTML here
</ul>
// KO Template
<script type="text/html" id="alltags">
<a href="#" data-bind="text: $data"></a>
</script>
// JS Code
self.getTags = function(data, event) {
self.availableTags(data.component.available_tags())
$(event.target).parent().find('ul').prepend('<li data-bind="template: { name: alltags, data: availableTags }"></li>')
}
Проблема, с которой я сталкиваюсь, что элемент DOM добавляется в div, как я этого хочу, но для жизни я не могу заставить его выполнить цикл foreach:
и генерировать содержимое меню.
Нужно ли обновлять привязки?
Привязки привязки не будут срабатывать при добавлении html таким образом, что бы я сделал.
Создайте выпадающие списки при загрузке и привяжите параметры к пустующему массиву, когда происходит событие щелчка, заполнив пустой массив желаемыми данными.
addtl.....
вы можете создать шаблон, который создает ваши выпадающие списки и загружает их, а затем делать что-то вроде этого
<!-- ko foreach: templates -->
<div data-bind:template:{name: tmpl, data:data}></div>
<!-- /ko -->
затем используйте setTimeout, чтобы загружать только несколько за раз, это все равно займет некоторое время, но уменьшит ваш интерфейс.
function recursive(){
setTimeout(function(){
// load 5 templates into template array
check if there are more left, call recursive function to add more
},50);
}
немного усложнился, но я сделал аналогичные вещи, чтобы исправить отставание пользовательского интерфейса в прошлом