2013-10-02 3 views
3

Может ли кто-нибудь объяснить мне, почему мой вызов метода чтения источника данных прекрасен при первом вводе моей страницы, но не выполняется, когда я вызываю его, чтобы обновить представление? Для записи я использую веб-интерфейс Kendo UI (а не MVC один) в среде Microsoft MVC. Я могу отчетливо видеть в отладке, что чтение никогда не вызывается, но если я попытаюсь войти, я попадаю в мини-файл JQuery ... который невозможно отлаживать для меня.Метод чтения() Kendo UI datasource read() не выполняется

Вот пример нашего кода:

var testDataSource = new kendo.data.DataSource({ 
    transport: { 
     read: function (options) { 
      $.ajax({ 
       url: "/Test/GetById", 
       data: { id: options.data[0] }, 
       beforeSend: function() { 
        utils.hasPendingChanges = false; 
        myViewModel.set("isDirty", false); 
       }, 
       success: function(result) { 
        utils.convertDates(result); 
        myViewModel.set("test", result); 
        kendo.bind($("#testForm"), myViewModel); 
       } 
      }); 
      cache: false 
     }, 
     parameterMap: function() { 
      return kendo.stringify(myViewModel.test); 
     } 
    }, 
    change: function() { 
     var test= this.view()[0]; 
     if (test!= null) { 
      myViewModel.set("test", test); 
      $("#testForm").show(); 
      kendo.bind($("#testForm"), myViewModel); 
     } else { 
      $("#testForm").hide(); 
     } 
    }, 
    schema: { 
     data: function(data) { 
      if (data.notvalid) { 
       $(data.data).each(function() { 
        $("#errors").append('<li>' + this.toString() + '</li>'); 
       }); 
      } else { 
       myViewModel.set("readonly", true); 
      } 

      return data.data; 
     } 
    } 
}); 

Метод чтения вызывается в подписываться событие так:

$.subscribe("/Test/Detail", function (id) { 
    testDataSource.read([id]); 
}; 

И отмены из ViewModel:

cancel: function() { 
      $("#errors").html(""); 
      myViewModel.set("readonly", true); 
      testDataSource.read([myViewModel.get("test.ID")]); 
     }, 

ответ

4

Когда вы определяете операцию чтения как функцию, вам нужно обозначить успех с помощью функции успеха ev передаваемых аргументов. Вот пример из documentation:

<script> 
var dataSource = new kendo.data.DataSource({ 
    transport: { 
    read: function(options) { 
     // make JSONP request to http://demos.kendoui.com/service/products 
     $.ajax({ 
     url: "http://demos.kendoui.com/service/products", 
     dataType: "jsonp", // "jsonp" is required for cross-domain requests; use "json" for same-domain requests 
     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); 
     } 
     }); 
    } 
    } 
}); 
</script> 
+2

исходное сообщение Передаваемые параметры для вызова Ajax, вы можете привести пример использования функции чтения, которая также передает параметры? Я не могу найти таких примеров в документации Kendo. Благодарю. –

+0

@AlanFisher Вы должны, вероятно, опубликовать это как отдельный вопрос, чтобы получить ответ. Однако, когда я столкнулся с вопросом, я могу дать простой ключ. Если вы хотите отправить данные на URL-адрес Read-сервера, вы можете использовать параметр data: для вызова ajax. Например, данные: {Value1: 'foo', Value2: 'bar'}. –

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