2014-02-25 43 views
1

這個問題是我昨天發佈的Telerik論壇上的一個關於this post的鏡像。訪問transport.read函數內的數據

我有一個TreeView與HierarchicalDataSource和我的問題很簡單:我可以訪問transport.read函數中的當前dataItem?

例如,考慮下面的代碼:

new kendo.data.HierarchicalDataSource({ 
    transport: { 
     read: function(options) { 
      // Here i'll prepare my url to be called 
      return "my/controller/" + dataItem.Id; 
     } 
    } 
}); 

我要訪問讀函數內部的電流擴展節點的DataItem的屬性。這可能嗎?

我已經嘗試了很多方法,但該函數內部的作用域使我無法訪問它之外的任何東西。

UPDATE

@OnaBai建議與工作 - 在我的情況 - Value財產,給出以下模型:

{ 
    id: "Value", 
    hasChildren: "HasChildren" 
}; 

但我希望能夠訪問更多的只是Id但整個dataItem。我試過的DataItem的增加 - 或要求 - 性能的模型,但它不工作:

{ 
    id: "Value", 
    hasChildren: "HasChildren", 
    fields: { 
     ParentId: { type: "string" } 
    } 
}; 

ParentId來自內部read功能resquest及其dataItem入店,但不是在options。還有另一種方法可以做到這一點?

更新2

這樣做的一個取巧的辦法可以通過模型的ID設置爲uid來實現:

{ 
    id: "uid" 
} 

功能將收到的UID,然後你可以從它dataSource與,例如dataSource.getByUid()

回答

3

假設Idid在模型中定義的,你應該做的:

new kendo.data.HierarchicalDataSource({ 
    transport: { 
     read: function(options) { 
      return "my/controller/" + options.Id; 
     } 
    } 
}); 

在這裏看到一個例子:http://jsfiddle.net/OnaBai/mE4zZ/2/

編輯:如果您需要訪問完整的模型,然後知道的id您可以使用DataSource上的get方法獲取該項目。

例子:

var ds = new kendo.data.HierarchicalDataSource({ 
    transport: { 
     read: function(options) { 
      if (options.Id) { 
       var item = ds.get(options.Id); 
       // Do whatever else you need with Item 
      } 
      return "my/controller/" + options.Id; 
     } 
    } 
}); 

修改的jsfiddle這裏http://jsfiddle.net/OnaBai/mE4zZ/3/

+0

謝謝。我工作,但我仍然沒有得到完整的數據項。請參閱我的更新。再次感謝你。 – DontVoteMeDown

+0

檢查**編輯**獲取所有項目 – OnaBai