2012-06-06 35 views
16

Tôi muốn xây dựng một máy khách cho REST-Service của mình bằng Knockout.js. Tôi có rất nhiều Kho lưu trữ tôi muốn truy cập thông qua các url khác nhau - vì vậy tôi đã đưa ra giải pháp này bằng cách sử dụng Khuôn mẫu-Trình bày mẫu. My problem: Tôi không thể tìm hiểu cách ánh xạ ItemsProperty bằng "dữ liệu" của tôi mà tôi nhận được từ dịch vụ của mình.Knockout.js ánh xạ JSON vào một mảng quan sát

var Repository = function (url) { 
    this.Url = url; 
    this.Items = ko.observableArray([]); 
    this.PendingItems = ko.observableArray([]); 
}; 

Repository.prototype = function() { 
    var 
     getAllItems = function() { 
      var self = this; 
      $.getJSON(self.Url, function (data) { 
      // data=[{"Id":1,"Name":"Thomas","LastName":"Deutsch"},{"Id":2,"Name":"Julia","LastName":"Baumeistör"}] 
       ko.mapping.fromJS(data, self.Items); 
      }); 
     }, 
    ... 


// i call it like this: 
customerRepository = new Repository('http://localhost:9200/Customer'); 
customerRepository.getAllItems(); 

Tôi nghĩ rằng vấn đề là ở đây: ko.mapping.fromJS (dữ liệu, self.Items); nhưng tôi không thể tìm đúng cách để làm điều đó.
Câu hỏi: tôi đang làm gì sai? Tôi đã tìm thấy một ví dụ - và họ đang làm giống như tôi nghĩ: http://jsfiddle.net/jearles/CGh9b/

Trả lời

28

Tôi tin rằng hai phiên bản đối số của fromJS chỉ được sử dụng cho các đối tượng đã được ánh xạ trước đó, tức là chúng có đối tượng tùy chọn ánh xạ rỗng. Vì ánh xạ của bạn là lần đầu tiên nó được chạy, nó cần đến nhà cung cấp mà đối tượng tùy chọn trống như vậy.

ko.mapping.fromJS(data, {}, self.Items); 

http://jsfiddle.net/madcapnmckay/j7Qxh/1/

Hope this helps.

+1

Đối với tham chiếu của mọi người, giữa đối tượng trống rỗng trong ví dụ này là một trình giữ chỗ trống cho đối tượng tùy chọn ánh xạ. – pimbrouwers

Các vấn đề liên quan