2013-04-09 102 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