2016-02-27 6 views
5

Naprawdę staram się załadować jsGrid za pomocą usługi Controller. Nie jestem w stanie zrobić tego poprawnie.Ładowanie jsGrid przez wywołanie Controller/WebService w MVC

Próbowałem nawet kodu przykładowego z demona witryny jsGrid, ale to też nie działało, ponieważ generuje błąd na! This.data.length lub grid nie ładuje się w ogóle.

Nie otrzymuję danych za każdym razem, gdy próbuję użyć poniższego kodu.

Doceń, jeśli ktoś może pomóc.

To jak wczytuję jsGrid:

$(element).jsGrid({ 
    height: 300, 
    width: "100%", 
    filtering: true, 
    sorting: true, 
    paging: true, 
    autoload: true, 
    pageLoading: true, 

    controller: { 
     loadData: function (filter) { 
      $.ajax({ 
       type: "GET", 
       url: "../Common/GetData", 
       data: filter, 
       dataType: "JSON" 
      }); 
     } 
    }, 
    pageSize: 10, 
    pageButtonCount: 5, 
    pageIndex: 1, 

    noDataContent: "No Record Found", 
    loadIndication: true, 
    loadIndicationDelay: 500, 
    loadMessage: "Please, wait...", 
    loadShading: true, 

    fields: [ 
     { name: "Name", type: "textarea", width: 150 }, 
     { name: "Age", type: "number", width: 50 }, 
     { name: "Address", type: "text", width: 200 }, 
     { name: "Country", type: "select" }, 
     { 
      name: "", type: "text", width: 50, sorting: false, filtering: false, 
      itemTemplate: function (value) { 
       return '<div class="edit-container"><a class="edit-custom-field-link">Edit</a><div class="sort-icon-container"><div class="up-arrow-icon"></div><div class="down-arrow-icon"></div></div></div>'; 
      } 
     } 
     //{ name: "Married", type: "checkbox", title: "Is Married", sorting: false } 
     //,{ type: "control" } 
    ] 
}); 
+1

Don” t zapomnij użyć: autoload: true, jeśli nie loadData nie zostanie wywołana – mauronet

Odpowiedz

6

Należy użyć obietnice podczas ładowania danych,

loadData: function(filter) { 

    return $.ajax({ 
     type: "GET", 
     url: "../Common/GetData", 
     data: filter, 
     dataType: "JSON" 
    }) 

} 

return $.ajax({}) nie zwraca obietnicę. Tak dziękuję!

+0

Czy możliwe jest załadowanie jsGrid za pomocą opcji pageLoading = true, coz sposób akceptuje parametr to loadData: function (filter) { return {data: (chcesz skorzystać z połączenia serwisowego), itemsCount: (użyj usługi wezwania serwisowego t)}. nie wiem, jak powiązać zgłoszenie serwisowe z obiektem danych. –

+2

CZY TO RZECZYWISTE DZIAŁA? Nie mogę załadować siatki, po prostu pojawia się siatka i mówię "nie znaleziono", mimo że widzę, że mój JSON jest żądany i odesłany, i mam dostęp do konsoli we wszystkich moich wydarzeniach i one się pojawiają. To jest tak bardzo frustrujące, ponieważ nie mogę opracować sposobu debugowania. Kiedy przechodzę przez podstawowy kod JQuery, nie ma to dla mnie żadnego znaczenia. AAAARRRRRGGH! –

+0

Podobny kod tutaj: http://stackoverflow.com/questions/35907482/data-not-populating-the-table-created-using-jsgrid –

0

Aby powrócić obietnica wypróbować ten kod loaddata:

  loadData: function() { 
      var d = $.Deferred(); 

      $.ajax({ 
       type: 'GET', 
       url: '../Common/GetData', 
       dataType: "json", 
       success: function (data) { 
        d.resolve(data); 
       }, 
       error: function(e) { 
        alert("error: " + e.responseText); 
       } 
      }); 

      return d.promise(); 
     } 
4

Ja też miał problemy z JSGrid. Używałem następujący fragment (jak niektórzy sugerują):

`

loadData: function(filter) { 
    console.log("LoadData called....") 
    var d = $.Deferred(); 
    $.ajax({ 
     type: "GET", 
     url: "/secure/msgitems", 
     data: filter 
    }).done(function(response) { 
     console.log( response); 
     d.resolve(response); 
     return; 
    }); 
return d.promise(); 
}, 
}, 

`

mogę zobaczyć wyniki wraca, ale mój jsGrid przechowywane rzygać. Okazuje się, że serwer musi zwrócić dane w następującym formacie:

{
data: [items], itemsCount: amountOfItems }

Oto gdzie deweloper omawia ten temat: https://github.com/tabalinas/jsgrid/issues/35

wydaje się działać ... FWIW