我正在使用 KnockoutJS 并通过 ajax 加载我的视图模型。在加载完成之前,我想显示一个“正在加载...”消息,如果没有加载数据,我想显示一个“没有结果”。信息。我最初的尝试如下所示:
<ul data-bind="template: { name: 'mentions-template', foreach: mentions.data }">
<li data-bind="visible: mentions.loaded() && mentions.data().length < 1">No mentions</li>
<li data-bind="visible: !mentions.loaded()">Loading...</li>
</ul>
<script type="text/javascript">
var viewModel = {
mentions: {
loaded: ko.observable(false),
data: ko.observableArray()
}
}
function loadData() {
$.post(action, function(result) {
viewModel.mentions.data = ko.mapping.fromJS(result);
viewModel.mentions.loaded(true);
ko.applyBindings(viewModel);
});
}
ko.applyBindings(viewModel);
loadData();
</script>
我预计第一个li
元素只会显示是否viewModel.mentions.loaded
为假并viewModel.mentions.data
包含一些项目,而第二个元素会li
显示直到viewModel.mentions.loaded
被设置为假,但两个项目始终显示。我究竟做错了什么?