我整天都在解决一个让我发疯的问题。似乎在更新其值时不会重新评估淘汰赛“if”语句的内容。
我有一个像这样的viewModel:
var userViewModel = (function(){
var context = ko.observable(),
// SignalR hub
hub = $.connection.user;
hub.client.setContext = function(data){
context(ko.mapping.fromJS(data));
}
return {
context: context;
};
})();
它使用 SignalR 更新客户端中的视图模型,该视图模型在启动时尚不存在。
我正在使用 ko if 绑定,因此在应用绑定时视图不会崩溃。视图如下所示:
<div class="js-user-template">
<!-- ko if: context -->
<div data-bind="with: context">
<span data-bind="text: firstName"></span>
<span data-bind="text: lastName"></span>
</div>
<!-- /ko -->
</div>
将它们放在一起的结合酱:
$('.js-user-template').each(function(){
ko.applyBindings(userViewModel, this);
});
当 SignalR 使用 setContext 异步更新客户端时,它不会在 DOM 中更新。奇怪的是,它确实在大约 10% 的时间内工作,这表明存在时间/线程问题。控制台中不会记录任何类型的警告。
谁能指出我正确的方向?任何帮助都感激不尽。