2014-07-21 83 views
2

我試圖列出從這個JSON數據所有的用戶名:如何使用挖空映射插件綁定匿名對象?

[{ 
     "full_name": "root", 
     "group": 0, 
     "home": "/root", 
     "username": "root", 
     "id": 1 
    }, { 
     "full_name": "Owner of many system processes", 
     "group": 1, 
     "home": "/root", 
     "username": "daemon", 
     "id": 2 
    }, { 
     "full_name": "System", 
     "group": 5, 
     "home": "/", 
     "username": "operator", 
     "id": 3 
    }] 

我的HTML看起來像這樣:

<body> 
     <h2>Knockout list</h2> 
     <ul data-bind="foreach: users"> 
      <li data-bind="text: username"></li> 
     </ul> 

     <script type="text/javascript"> 
      function getUsers() 
      { 
       return $.ajax 
         ({ 
          type: "GET", 
          url: "http://XXX.XXX/api/userinfo", 
          username: "root", 
          password: "meh", 
          cache: false, 
          dataType: "json" 
         }); 
      } 

      getUsers().done(function(results) 
      { 
       var users = "{users: " + results + "}"; 
       var viewModel = ko.mapping.fromJS(users); 
       ko.applyBindings(viewModel); 
      }); 

     </script> 
</body> 

在控制檯中我得到這個錯誤:

ReferenceError: users is not defined 
with($context){with($data||{}){return{'foreach':function(){return users }}}} 

我不要認爲向json添加任何東西是一個好主意。我試圖使用var users = "{users: " + results + "}";,但它比其他任何事情都更加絕望,我希望儘可能避免它。

你有什麼想法如何使這項工作?謝謝。

回答

2

鑑於你的HTML,你的viewmodel需要一個名爲users的屬性,因爲這是你在foreach循環中迭代的內容。我無法確定,但從結果創建新對象的行看起來不正確。你可以嘗試創建您的視圖模型明確的用戶屬性和分配映射的結果是:

var viewModel = {}; 
viewModel.users = ko.mapping.fromJS(data); 
ko.applyBindings(viewModel); 

創建一個jsfiddle,並在那裏工作。

+0

它的作品謝謝你。 –

相關問題