私は正気を失っている問題に一日中取り組んでいます。値が更新されたときにノックアウト 'if' ステートメントの内容が再評価されないようです。
私は次のようなビューモデルを持っています:
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 を使用して、起動時にまだ存在しないクライアントの viewModel を更新します。
バインディングを適用するときにビューが壊れないように、バインディングの場合は ko を使用しています。ビューは次のようになります。
<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% の確率で動作します。コンソールには、いかなる種類の警告も記録されません。
誰かが私を正しい方向に向けることができますか? どんな助けでも大歓迎です。