Для справки и для кого-либо еще, сталкивающегося с этой проблемой, она оказывается, по крайней мере, несколько очевидной в ретроспективе.
Нокаут встроенный «анонимный» шаблоны отлично работает во многих случаях, но с JQMobile он может быть немного причудливым.
Это потому, что JQMobile будет настраивать содержимое анонимного шаблона при загрузке страницы, как и при использовании всего другого контента.
Затем, когда вы используете функцию ApplyBindings нокаута, нокаут добавит соответствующие элементы, как и должно быть. Поскольку многие сообщения и ответы намекают, вы должны ДОЛЖНЫ называть collapsible() для вновь созданных элементов через что-то вроде этого.
$("div[data-role='collapsible']").collapsible({refresh: true});
Проблем нет. ОДНАКО, если JQM уже применил форматирование, тогда анонимный шаблон уже был «отображен» JQM, поэтому его снова можно вызвать, вызвав разборку, вызвав всевозможные фанковые результаты, включая удвоенный заголовок, вложенные коллажи и т. Д.
решение для меня было использовать «именованный шаблон» функцию KNOCKOUT, а просто поставить шаблон, чтобы сделать сборно-разборные элементы в теге, например:
<script type="text/html" id="alarm-template">
<div data-role="collapsible" data-collapsed="true" data-collapsed-icon="arrow-d" data-expanded-icon="arrow-u" data-enhance="false">
<h3 data-bind="text:name"></h3>
<p>The content here</p>
<p data-bind="text: name"></p>
</div>
</script>
Выполнение этого предотвращает JQM от «визуализации» элементов шаблона, когда загружаются страницы, поэтому они будут отображаться правильно, когда они будут созданы.
EDIT: вышеизложенное отлично подходит для складок НЕ в складном наборе, но если они находятся в комплекте, я нашел стиль элементов (в частности, округление угла, чтобы указать принадлежность к набору) не работает правильно.
Из того, что я могу сказать, есть 2 проблемы:
Во-первых, просто запуск «Создать» на самом деле не обновить дизайн всех collapsibles в наборе. для этого вам необходимо ...
$("div[data-role='collapsible-set']").collapsibleset('refresh');
Но, есть еще одна проблема. JQM «отмечает» последний элемент в наборе как «последний элемент». Затем этот факт используется для определения того, как стилизовать последний элемент, поскольку он расширяется/сворачивается.
Поскольку Knockout фактически не перестраивает весь набор (для скорости), каждый раз, когда вы вызываете метод refresh, JQM покорно отмечает последний элемент как «последний», но никогда не удаляет метки на предыдущих элементах. В результате, если вы начинаете с пустого списка, каждый элемент становится помеченным как «последний», и из-за этого стилизация не получается.
Я подробно объяснил это в github в отчете о проблеме.
https://github.com/jquery/jquery-mobile/issues/4645
Блестящий, спас меня тонны работы. Спасибо! –