私は Dojo (1.7) に非常に慣れていないので、AMD ローダーとグローバルな哲学に非常に興奮しています。その後、数十のドキュメントを読み終えたと思って、何度もグーグルで検索しましたが、頭がおかしくなり始めました。まだ理解できていません。いくつかのことを実行します:任意の種類の JSONの dijit.Tree を表示したいと思います。はい、JSON エディターのようです。ここに私の期待があります:
- サンプル JSON :
{"infos":{"address":"my address","phone":"my phone"},"insurance":{"forks":[14,53,123],"prices":[5,8,"3%"]}}
- 任意の JSON のさまざまな変数を表示します。ルートの子はルートの json 変数、子の L1 はルート変数などです。json 変数の型 (文字列、数値、オブジェクト、配列) に応じて、対応するアイコンも表示します。
- json全体を解析して一度にフォーマットする必要はありません。たとえば、最初にルートノードを表示し、次に適切にフォーマットされた子がgetChildrenメソッドを実行するなど、expandoで段階的に行われます(遅延のように)ロード)。私はすでに javascript を使用して独自の Trees クラスを作成しています。より柔軟な方法は、コンストラクターに dataRoot、renderItem(dataItem, domItem)、および getChildren(dataItem) を指定して、ツリーのみを実行して返すことができるようにすることでした。必要な場合にのみレンダリングを実行し、ツリーはデータ構造について知らず、それを変更することもありませんでしたが、なぜ dijit.Tree が非常に制限的な構築方法を必要とするのかよくわかりません...
これが私の最後の試みです、それは完全に正しい方法ではないかもしれません(おそらくサブクラス化する必要があります)が、私が理解している限り、3つのクラス(道場ストア、ツリーモデル、ツリーウィジェット)で遊ぶ必要がありますが、最初はモデルはルート ノードを取得できません。別のコード コメントを確認してください。それで、いくつかの明確な説明を含む簡単な例を私に与えることができる忍耐強い人がいますか(ええ、私は少し要求が厳しいです)、少なくともコンストラクターのオプションに必要な正しい変数のリストは、私の素敵なツリービューの表示を開始するために必要ですjson ファイルがたくさんあり、完全に迷ってしまいました。どうもありがとうございました。
...
// before there is the AMD part that load the needed things
Xhr.get({ url:'data/file.json', handleAs:'json',
load: function(data){
console.log('xhr.loaded : ', data);// got my javascript object from the json string
var store = new ItemFileReadStore({// is it the right store I need ??
// or the Memory store ?
// assuming later I'll need to save the data changes
rootId : 'root',//
rootLabel : 'Archive',// useless ? isn't it the model responsability ?
data : {id:'root', items:[data]}// trying to give a root node well formatted
});
var model = new TreeStoreModel({
store : store,
getChildren : function(obj){
// firstly here it seems the root is not found
// I got a 'error loading root' error
// what is missing in my instanciations ??
// what is exactyly the type of the 1st arg : a store ?
console.log('getChildren : ', this.get(obj.id));
},
mayHaveChildren : function(){
console.log('mayHaveChildren ', arguments);
return true;
}
});
var tree = new Tree({
model: model
}, domId);
tree.startup();
}
});