【发布时间】:2016-07-27 19:26:57
【问题描述】:
我有一个表,其中包含从淘汰的可观察数组中获得的项目,用户输入搜索文本并且巧合填充 observableArray,该表显示在模式上。每个项目都有一个按钮来打开另一个具有某些功能的模式(因为不相关而被省略)。如果 observableArray 长度大于 0,表格必须显示项目,否则必须显示一行以表示没有结果可显示。
<tr style="display: none" data-bind="visible: items().length == 0">
<td class="text-center alert alert-warning" colspan="4"><b>There's no coincidences</b></td>
</tr>
我的视图模型:
var viewModel = function () {
self.items= ko.observableArray([]);
//Modal is already on html, but not visible, to show it I use this
$('#searchProduct').modal('show');
//When modal is closed, the table is cleaned, so the items in observableArray are removed
$('#searchProduct').on('hidden.bs.modal', function () {
self.items.removeAll();
});
}
问题是第一次,可见绑定工作正常,但是当 observableArray 长度发生变化时(在隐藏时调用 removeAll 时),绑定不会再次应用。我知道是因为绑定已经应用,所以当 observableArray 发生变化时,长度会更新,但条件不能再次呈现 html。
如何通过淘汰赛解决这个问题?
(我尽量说得很具体,但如果需要更多信息,我可以更新信息更清楚)
【问题讨论】:
-
而不是全部删除,请您尝试重置,例如 self.items({})。它重置了阵列。然后添加您的新项目
-
谢谢你,我测试了这个解决方案,但仍未解决。我想要完成的是,当从 observableArray 中删除项目并且长度等于 0 时,会显示一条消息告诉没有巧合的行。
-
你能不能为它创建一个小提琴..?
-
我不知道如何创建一个,我对编程很陌生,我现在正在研究如何创建一个,谢谢你的帮助,请耐心等待。
-
另外,请注意,在将它们与 KnockoutJS 结合时,您需要使用 custom bootstrap modal binding handlers。不要在 view model 中进行 DOM 操作(例如
on处理程序),这就是绑定处理程序的用途。