2012-08-31 3 views
1

Редактировать Похоже, у меня есть загрузка с сервера сейчас. Если кто-нибудь увидит какие-либо проблемы с этим, хотел бы услышать о них.отображение нокаута

Имею некоторые проблемы с подключением плагина отображения нокаута. Я могу получить эту работу со статическими данными без проблем, см. http://jsfiddle.net/RH9wQ/

Когда я пытаюсь загрузить данные с сервера, это, похоже, не работает. Ниже приведен код кости, который я использую. Данные в jsfiddle - это точные данные, которые возвращаются с моего сервера. Упускаю ли я что-то совершенно очевидное?

Что я делаю, это загрузка в разные наркотики на основе альфа-кнопок, которые нажаты. Поэтому нажмите «y» и получите список лекарств, начинающихся с y, нажмите «z» и получите список лекарств, начинающихся с z. Когда кнопки нажимаются/данные загружаются, я хочу заменить мои данные viewModel тем, что поступает с сервера.

Кроме того, обратите внимание на консоль на странице jsfiddle, данные выглядят отлично (8 элементов массива и счет = 8), но обратите внимание, что консоль viewModel, preferredDrugs и count разные, кто-нибудь знает, почему это так?

$(function() { 
    $('.load').click(function() { 
     var $letter = $(this).attr('value'); 

     //show spinner 
     $('#loading').show(); 

     //load in drug list data 
     $.getJSON('/PreferredDrugList/service/preferredDrugs/' + $letter, function(data) { 
      //hide spinner 
      $('#loading').hide(); 

      console.log(data); 
      //create observable properties for each of the properties on data 
      ko.mapping.fromJS(data, viewModel); 
      console.log(viewModel); 

     }); 
    }); 

});//end ondomready 

//default data 
var data = { 
    preferredDrugs: [], 
    count: 0 
}; 

var viewModel = ko.mapping.fromJS(data); 

ko.applyBindings(viewModel); 

ответ

5

При обновлении существующей модели просмотра с помощью ko.mapping вы можете также попробовать:

ko.mapping.fromJS(data, {}, viewModel); 

..instead из ..

ko.mapping.fromJS(data, viewModel); 

Кроме того, обратите внимание на консоль на jsfiddle страницы, данные выглядят отлично (8 массив элементов и count = 8), но обратите внимание на консоль viewModel, preferredDrugs и count разные, кто-нибудь знает, почему это?

Да, оригинальные препараты предпочтительные является нормальным массив в то время как новые предпочтительные препараты является наблюдаемыми массивом. Наблюдаемый массив будет выглядеть как пустой массив, если вы попытаетесь получить к нему доступ непосредственно. Однако наблюдаемые функции являются функциями и должны рассматриваться как таковые.

Итак ...

console.log(myViewModel.preferredDrugs); 

... возвращает пустой массив, в то время как ...

console.log(myViewModel.preferredDrugs()); 

... возвращает фактический массив.

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