0
我整天忙於解決令我瘋狂的問題。看起來敲除'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更新視圖模型在客戶端,它並不存在於在啓動。
如果綁定,我使用ko,因此視圖在應用綁定時不會失效。視圖lookes這樣的:
<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%的時間內工作,這表明時間/線程問題。控制檯中不會記錄任何類型的警告。
任何人都可以指向正確的方向嗎?任何幫助都感激不盡。
也許你可以在jsFiddle中使用類似setTimeout/setInterval而不是中心代碼的東西來重現此問題?看起來沒問題。你實際上並不需要額外的'if',因爲'with'已經正確處理null/undefined。 –
爲什麼ApplyBindings在每個循環中? – BeaverProj
我試圖讓這個jsfiddle並拿出信號和映射插件。似乎爲我工作http://jsfiddle.net/drdamour/L9FAa/ –