2012-06-14 59 views
0

我試圖通過json將來自服務器的模型綁定到我在客戶端上創建的viewmodel,然後使用Knockout.js將其綁定到顯示數據。我有以下代碼使用post命令創建KnockoutJS ViewModel以填充ViewModel

function tireRunDataViewModel() { 
     var self = this; 

     self.load = function() { 
      $.jQuery.post('./GetTireRunModel', { outingID: '@Model' }, function (result) { 
       self.data = ko.mapping.fromJS(result); 
      } , "json"); 
     }; 

     self.load(); 
    } 

var viewModel = new tireRunDataViewModel(); 
ko.applyBindings(viewModel); 

看起來好像在ko.applyBindings完成之前沒有設置self.data。爲什麼是這樣,我能做些什麼來確保在applyBindings完成之前填寫self.data?

回答

1

$.jQuery.post的調用是異步的,所以回調不會執行,直到它完成,這是ko.applyBindings被調用後。

幾個選項:

  • ,你可以在你的回調調用ko.applyBindings。如果您的應用程序不比這更復雜,那麼可以在AJAX調用完成後應用綁定。

  • 您可以創建self.data作爲可觀察值,然後在回調中更新它,例如:self.data(ko.mapping.fromJS(result));。然後在您的用戶界面中,您可以在取決於data的UI周圍使用data上的with綁定,以便在準備就緒之前不會呈現它。

它的快速模擬:http://jsfiddle.net/rniemeyer/Wf8E8/

+0

我本來在回調applybindings,但我想添加一些保存功能與重構是我遇到了這個問題。 – PlTaylor

+0

然後,第二個選項可能會更好。使'data'成爲可觀察值並在回調中更新它的值。 –

+0

感謝您的幫助。第二個選項效果很好。 – PlTaylor