2012-06-06 3 views
16

Я хочу построить клиент для моего REST-сервиса с помощью Knockout.js. У меня есть много репозиториев, к которым я хочу получить доступ через разные URL-адреса, поэтому я придумал это решение, используя шаблон Revealing-Prototype-Pattern. My проблема: Я не могу узнать, как сопоставить ItemProperty с моими «данными», которые я получаю от своей службы.Knockout.js, отображающий JSON в наблюдаемый массив

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(); 

Я думаю, что проблема в этом: ko.mapping.fromJS (данные, self.Items);, но я не могу найти правильный способ сделать это.
Вопрос: Что я делаю неправильно? я нашел пример - и они делают то же самое, что и я: http://jsfiddle.net/jearles/CGh9b/

ответ

28

Я считаю, что две аргумента-версии fromJS используются только для объектов, которые были ранее отображены, т. е. у них был объект неявного пустого объекта сопоставления. Так как ваше сопоставление впервые выполняется, ему необходимо предоставить этот пустой объект таким образом.

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

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

Надеется, что это помогает.

+1

Для ссылки на источник, литерал среднего пустого объекта в этом примере является пустым заполнителем для объекта опций сопоставления. – pimbrouwers

Смежные вопросы