我正在使用 jQuery Mobile (jQM) 和 Knockout.js (ko) 来开发应用程序。在这个应用程序中,我需要生成由不断更新的 Web 服务定义的可变数量的按钮。
所以,在我的标记中,我有:
<div id="answerPage-buttons" data-bind="foreach: buttonsLabels">
<button data-role="button" data-inline="true" data-theme="b" data-bind="text: text, click: $root.submitAnswer" />
</div>
buttonLabels 是从 Web 服务返回的短字符串列表。它定义为:
self.buttonLabels = ko.observableArray();
当按钮不是“jQM 样式”时,这一切都可以正常工作。但是,当我使用以下方式设置它们的样式时:
$("#answerPage-buttons").trigger("create");
更新过程中出现问题。
问题似乎是 jQM 将按钮包装在一个 div 中(具有同级跨度),以使它们看起来都很好并且具有移动性。但是,当 ko 通过绑定应用更新时,它只删除标签,留下周围的东西,并添加新的按钮标签 - 然后也由 jQM 触发器调用设置样式。
所以,我最终得到了一个不断增长的按钮列表——只有最后一组可以操作(因为之前的按钮被移除了按钮元素,但所有样式都保留了下来)。
我认为,通过在可观察对象更新后立即发出以下调用,我已经设法解决了这个问题:
$("#answerPage-buttons div.ui-btn").remove();
但是,我的感觉是可能有更好的方法。有没有?