2015-01-29 2 views
0

Я пытаюсь отобразить список (используя foreach) заданий, которые я получаю из запроса JSON (см. Ниже) с помощью ko.mapping.fromJS, но его появление пусто. Данные JSON, по-видимому, правильно загружены в массив наблюдаемых объектов, но не отображаются в HTML ????foreach: привязка не работает ko.mapping.fromJS data

Это фактически является частью мобильного веб-приложения (Jquery Mobile), так на второй странице появляются данные, не уверен, если это делает разницу (я загрузить весь код вверх в начале)

HTML (упрощенный)

<ul data-bind="foreach: JobsToday " > 
<li> <span data-bind="text: job_id"> </span> </li> 
</ul> 

JSON DATA (упрощенный)

[{"job_id":"1753","driver_id":"23"},{"job_id":"1754","driver_id":"23"}] 

JAVASCRIPT

<script type="text/javascript"> 
    var JobsToday=ko.observableArray([]); // observable array holds the jobs for the current day 

function DispatchModel(){ 

    self = this; //cache the current context 
    self.userd_id= 0; 

     $.getJSON(controller_php_script+"/", {'action' : 'list_driver_jobs', 'driver_id' : self.user_id}, function(jobsData) 
     { 

    self.JobsModelArray= ko.mapping.fromJS(jobsData); // get the jobs 
     JobsToday =self.JobsModelArray; //assign to global observable 

//print out the observablbles to make sure data is three 
     console.log(" JobsModelArray: "+ ko.toJSON(JobsToday)); 
       }); 

} //end of DispatchModel 


// Start of our main function 
$(document).ready(function() { 

    var vm = new DispatchModel(); //create the Dispatch VMM 
    ko.applyBindings(vm); //knockout.js apply the binding 

}); //end $(document).ready 

    </script> 

ответ

2

JobsToday наблюдаемый массив находится вне функции зрения модели. Поскольку вы связали форму с DisplayModel, она не может быть связана. Переместите JobsToday внутри функции.

function DispatchModel(){ 

    self = this; //cache the current context 
    self.JobsToday=ko.observableArray([]); // observable array holds the jobs for the current day 

Вторая проблема заключается в том, что вы установили JobsToday к данным, отображенным. Это обычная ошибка с новичками в нокауте. Вы устанавливаете наблюдаемые через функцию, а не напрямую. Было бы лучше работать так:

var mapped = ko.mapping.fromJS(jobsData); // get the jobs 
self.JobsToday(mapped); //assign to observableArray 
+0

Да, вы меня на правильном пути я консолидированы пару varaibles и обнаружили, что команда: ko.mapping.fromJS (jobsData, {}, self.JobsToday); // сопоставить данные драйвера пользователя с этой моделью сделал трюк ... да, помню, чтобы назначать объект объекту (assign_me) по сравнению с равными .. был ключом, спасибо. – user265505

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