2013-07-02 2 views
1

Я пытаюсь использовать ниже данных для отображения KO DataSetKnockout JS связывание и Ajax занимает больше времени, чтобы загрузить

Я пытаюсь инициализировать его с помощью AJAX событие успеха в document.ready

var organisationData = data.d; var orgObject = { organisationsData: organisationData }; 

var newviewmodel = ko.viewmodel.fromModel(orgObject); 

Проблема ajax занимает гораздо больше времени для загрузки, а затем появляется ошибка javascript, говоря, что viewmodel не существует.

Так

  1. Как я могу сказать Нокаут пересвязать когда Аякса успешно загружен

  2. Есть в любом случае я могу сказать KO не связывать/скрыть таблицу, когда данные, которые я получил от ajax пуст?

Продолжение Using KnockoutJS automatic binding

ответ

2

Я сделал скрипку, в котором я заменил вызов сервера с таймером.

JS:

var vm = { 
    items: ko.observableArray() 
}; 
ko.applyBindings(vm); 

setTimeout(function(){ 
    var rawData =[ 
     {name:'item1'}, 
     {name:'item2'}, 
    ]; 
     ko.mapping.fromJS(rawData, {}, vm.items); 
    // to ensure that name is an observable 
    var item1Name = vm.items()[0].name(); 
    console.log(item1Name); 
},1500); 

Вид:

<table> 
    <tbody data-bind="foreach : items"> 
     <tr> 
      <td data-bind="text : name"></td> 
     </tr> 
    </tbody> 
</table> 
<span data-bind="visible : items().length == 0">Loading...</span> 

See fiddle

Я надеюсь, что это помогает.

1

Вам необходимо вызвать ko.applyBinding в обратном вызове ajax, чтобы убедиться, что данные доступны. В настоящее время это происходит раньше, чем наверху. Это ваша проблема. Если вам нужна дополнительная помощь, я предлагаю вам создать скрипку вашей проблемы и позволить мне и другим попытаться исправить ее для вас.

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