2013-04-09 108 views
0

這可能是一個非常基本的問題,但在下面的視圖模型中,我從ajax調用中填充self.userData。我想在UI中顯示這些信息,我想'with'綁定是要走的路,但是由於self.userData是空的,直到調用ajax函數,我從綁定中得到一個錯誤具有約束力的knockout.js

HTML

<div data-bind="with: userData"> 
    <div data-bind="text: userId"></div> 
    ... 
</div> 

模型

var viewModel = function() { 
     var self = this; 
     self.userData = {}; 
     self.login = function(data) { 
      var postData = { ..trimmed out.. }; 
      $.ajax({ 
       type: "POST", 
       url: "myService", 
       data: postData 
      }).done(function (data, status) { 
       self.userData = ko.mapping.fromJS(data, userData); 
       console.log(self.userData); 

      }).fail(function (data, status) { 
       alert('Could Not Login'); 
      }); 
     } 

    }; 
    ko.applyBindings(new viewModel()); 

回答

2

初始化的UserData具有空觀察到的,一則與由所述映射插件一旦呼叫返回創建的對象設置它。即改變

self.userData = {}; 

self.userDara = ko.observable(); 

,改變

self.userData = ko.mapping.fromJS(data, userData); 

self.userData(ko.mapping.fromJS(data,userData)); 
1

需要初始化用戶數據爲空觀察到的(從AJAX調用單個對象)或可觀察數組(多PLE對象)第一:

self.userData = ko.observableArray([]); 

self.userData = ko.observable(); 
+0

如果是這樣的話,雖然(它可能會根據返回的數據),他也將需要交換*有*有約束力* foreach *綁定,基於html代碼片段中* userData *的綁定。 – Grim 2013-04-09 07:47:47

+0

你就在那裏@Grim。好點。 – 2013-04-09 07:49:48