2013-05-14 17 views
10

Mam dość irytujący błąd (?) W KDE UI Datasource.Funkcja niestandardowego transportu Kendo Datasource Transport nie nazywa się

Moja metoda aktualizacji w transporcie nie jest wywoływana, gdy przekazuję funkcję niestandardową, ale działa, gdy podaję jej adres URL.

to działa:

... 
transport: { 
    update: { url: "/My/Action" } 
} 
... 

To nie

... 
transport: { 
    update: function(options) { 
     var params = JSON.stringify({ 
      pageId: pageId, 
      pageItem: options.data 
     }); 
     alert("Update"); 
     $.ajax({ 
      url: "/My/Action", 
      data:params, 
      success:function(result) { 
       options.success($.isArray(result) ? result : [result]); 
      } 
     }); 
    } 
} 
... 

Funkcja nie jest uzyskiwanie wywołana, ale żądania AJAX jest wykonana z aktualnym adresie URL strony, a dane modelu jest wysłana , co jest dość dziwne. Brzmi jak błąd.

Jedynym powodem, dla którego potrzebuję tego, jest to, że Kendo nie może stwierdzić, że moje działanie aktualizacji zwraca tylko jeden element, a nie tablicę - więc, ponieważ nie chcę zginać mojego interfejsu API, żeby tylko zaspokoić Kendo, chciałem zrobić to na odwrót.

Czy ktoś to doświadczył i może wskazać mi właściwy kierunek?

Próbowałem również używać schema.parse, ale nie zostało to wywołane podczas wywoływania metody Update.

Używam myDs.sync() do synchronizowania źródła danych.

+0

Mam ten sam problem, nie wiem, czy to jest stała ... – SamJackSon

Odpowiedz

15

działa zgodnie z oczekiwaniami z demo z documentation:

var dataSource = new kendo.data.DataSource({ 
    transport: { 
     read: function(options) { 
     $.ajax({ 
      url: "http://demos.kendoui.com/service/products", 
      dataType: "jsonp", 
      success: function(result) { 
      options.success(result); 
      } 
     }); 

     }, 
     update: function(options) { 
     alert(1); 
     // make JSONP request to http://demos.kendoui.com/service/products/update 

     $.ajax({ 
      url: "http://demos.kendoui.com/service/products/update", 
      dataType: "jsonp", // "jsonp" is required for cross-domain requests; use "json" for same-domain requests 
      // send the updated data items as the "models" service parameter encoded in JSON 
      data: { 
      models: kendo.stringify(options.data.models) 
      }, 
      success: function(result) { 
      // notify the data source that the request succeeded 

      options.success(result); 
      }, 
      error: function(result) { 
      // notify the data source that the request failed 
      options.error(result); 
      } 
     }); 
     } 
    }, 
    batch: true, 
    schema: { 
     model: { id: "ProductID" } 
    } 
    }); 

    dataSource.fetch(function() { 
    var product = dataSource.at(0); 
    product.set("UnitPrice", product.UnitPrice + 1);   
    dataSource.sync(); 
    }); 

Oto live demo: http://jsbin.com/omomes/1/edit

+0

Spróbuj tego: http : //jsbin.com/oguxac/1/ - jedyna różnica polega na tym, że nie używam niestandardowej funkcji do odczytu. Może to jest problem. Jeśli spojrzysz na konsolę, w kendo zostanie zgłoszony błąd. – Jeff

+3

To jest problem. Musisz również użyć funkcji niestandardowej do odczytu(). –

+0

Ale dlaczego jest to konieczne? Jeśli tak jest, czy istnieje łatwiejszy sposób zrobienia tego, co muszę zrobić w metodzie aktualizacji, bez konieczności dostarczania własnej funkcji tylko po to, aby wynik był w tablicy? – Jeff

Powiązane problemy