2013-10-02 90 views
3

任何人都可以解釋爲什麼當我第一次進入我的頁面時,我對數據源讀取方法的調用工作正常,但無法執行時,只要我回電刷新視圖?爲了記錄,我在Microsoft MVC環境中使用Kendo UI web(而不是MVC)。我可以清楚地看到在調試中讀取永遠不會被調用,但如果我嘗試介入,我進入JQuery縮小文件...這是不可能爲我調試。Kendo UI數據源讀取()方法不執行

這裏是我們的代碼示例:

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; 
     } 
    } 
}); 

read方法被調用的預訂事件,像這樣:

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

而且在取消視圖模型的:

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

回答

4

當您將讀取操作定義爲函數時,您需要用ev的成功函數表示成功ent參數被傳遞。下面是來自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,可以在ajax調用上使用data:參數。例如數據:{Value1:'foo',Value2:'bar'}。 –