【发布时间】:2012-07-20 20:00:50
【问题描述】:
我正在使用 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 为 false 并且 viewModel.mentions.data 包含某些项目时才会显示,而第二个 li 将显示直到 viewModel.mentions.loaded 设置为 false,但是这两个项目始终显示。我做错了什么?
【问题讨论】:
-
我在淘汰赛绑定中使用
!时遇到了问题,您尝试过== false吗? -
刚刚做了,结果一样。这就像 knockoutjs 在进行绑定时甚至不会触及现有的
li元素。 -
奇数。因为我遇到过类似的问题,所以我通常会在我的视图模型中添加一个
status属性并将其绑定到 UI 中的<span>;实际消息在ko.computable中确定。
标签: knockout.js