2

この質問は、昨日投稿した Telerik のフォーラムのこの投稿からのミラーです。

HierarchicalDataSource を持つ TreeView があり、質問は簡単です: 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;
        }
    }
});

read 関数内で現在展開中のノードの dataItem のプロパティにアクセスしたいと考えています。これは可能ですか?

私は多くの方法を試しましたが、その関数内のスコープでは、その関数の外には何もアクセスできません。

更新

@OnaBai の提案はValue、次のモデルを考えると、私の場合はプロパティで機能しました。

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

しかし、それ以上にアクセスできるようにしたいのですIdが、dataItem. モデルに dataItem または request プロパティを追加しようとしましたが、うまくいきません:

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

ParentIdresquest に由来し、関数内ではアクセスdataItemできません。それを行う別の方法はありますか?optionsread

更新 2 :

モデルの id を に設定することで、これを行うためのトリッキーな方法を実現できますuid

{
    id: "uid"
}

関数は uid を受け取り、dataSource から取得できますdataSource.getByUid()

4

1 に答える 1

3

モデルで定義されていると仮定するとId、次のことを行う必要があります。id

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

ここで例を参照してください: http://jsfiddle.net/OnaBai/mE4zZ/2/

編集:完全なモデルにアクセスする必要がある場合は、アイテムを取得するために DataSource でメソッドをid使用できることがわかっています。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/

于 2014-02-25T14:53:48.090 に答える