0

dojoツールキットとdjit.treeウィジェットを操作しているときに、次のエラーが発生しました。

dojo.data.ItemFileWriteStore: Invalid item argument 

phpサーバーからjson形式のデータをロードし、 a とadijit.treeを使用して表示するjavascript関数で。私のjsonデータは次のとおりです。ItemFileWriteStoreForestStoreModel

{
    "identifier": "id",
    "label": "name",
    "items": [{
        "type": "parent",
        "name": "Adresse des Finanzamts",
        "id": "1020right00",
        "children": [{
            "type": "Leaf",
            "name": "Relationship type: 1:1",
            "id": "Adresse des Finanzamts1:1"
        }, {
            "type": "parent",
            "name": "Left",
            "id": "Adresse des Finanzamts010",
            "children": [{
                "type": "Leaf",
                "name": "Table name: Finanzamtdaten",
                "id": "1014left23432"
            }, {
                "type": "Leaf",
                "name": "Field name: fkFinanzamtAdresse:INTEGER",
                "id": "1018lef423t"
            }]
        }, {
            "type": "parent",
            "name": "Right",
            "id": "Adresse des Finanzamts111",
            "children": [{
                "type": "Leaf",
                "name": "Table name: Adresse",
                "id": "105right234"
            }, {
                "type": "Leaf",
                "name": "Field name: adresseId:INTEGER",
                "id": "106right2223"
            }]
        }]
    }, {
        "type": "parent",
        "name": "Adresse des Mitarbeiters",
        "id": "1013right00",
        "children": [{
            "type": "Leaf",
            "name": "Relationship type: 1:1",
            "id": "Adresse des Mitarbeiters1:1"
        }, {
            "type": "parent",
            "name": "Left",
            "id": "Adresse des Mitarbeiters010",
            "children": [{
                "type": "Leaf",
                "name": "Table name: Mitarbeiter",
                "id": "100left23432"
            }, {
                "type": "Leaf",
                "name": "Field name: fkAdresse:INTEGER",
                "id": "1012lef423t"
            }]
        }, {
            "type": "parent",
            "name": "Right",
            "id": "Adresse des Mitarbeiters111",
            "children": [{
                "type": "Leaf",
                "name": "Table name: Adresse",
                "id": "105right234"
            }, {
                "type": "Leaf",
                "name": "Field name: adresseId:INTEGER",
                "id": "106right2223"
            }]
        }]
    }]
}

コードは、を使用してサーバー側でフォーマットされますjson_encode()

 var treeObject = dijit.byId("relationStructure");
            treeObject.model.store.clearOnClose = true;
            treeObject.model.store.close();
            var newStore = new dojo.data.ItemFileWriteStore({
                data: data
            });

            treeObject.model.store = newStore;
            treeObject.model.query = {"type": "parent"};
            treeObject.rootId = "root";
            treeObject.rootLabel = "Table content";
            treeObject.childrenAttrs = ["children"];
            treeObject.showRoot = false;

            treeObject.refreshModel();

今jsonデータ:

  {"identifier":"id","label":"name","items":[{"type":"parent","name":"Finanzamtdaten des Mitarbeiters","id":"1022right000","children":[{"type":"Leaf","name":"Relationship type: 1:1","id":"Finanzamtdaten des Mitarbeiters1:1"},{"type":"parent","name":"Left","id":"Finanzamtdaten des Mitarbeiters0100","children":[{"type":"Leaf","name":"Table name: Mitarbeiter","id":"100left234320"},{"type":"Leaf","name":"Field name: fkFinanzamtdaten:INTEGER","id":"1019lef423t0"}]},{"type":"parent","name":"Right","id":"Finanzamtdaten des Mitarbeiters1110","children":[{"type":"Leaf","name":"Table name: Finanzamtdaten","id":"1014right2340"},{"type":"Leaf","name":"Field name: finanzamtdatenId:INTEGER","id":"1015right22230"}]}]},{"type":"parent","name":"Adresse des Mitarbeiters","id":"1013right001","children":[{"type":"Leaf","name":"Relationship type: 1:1","id":"Adresse des Mitarbeiters1:1"},{"type":"parent","name":"Left","id":"Adresse des Mitarbeiters0101","children":[{"type":"Leaf","name":"Table name: Mitarbeiter","id":"100left234321"},{"type":"Leaf","name":"Field name: fkAdresse:INTEGER","id":"1012lef423t1"}]},{"type":"parent","name":"Right","id":"Adresse des Mitarbeiters1111","children":[{"type":"Leaf","name":"Table name: Adresse","id":"105right2341"},{"type":"Leaf","name":"Field name: adresseId:INTEGER","id":"106right22231"}]}]}]}
4

1 に答える 1

1

データとIDが衝突しています。との同じIDを持つ2つのアイテムがあり105right234ます106right2223

"dojo.data.ItemFileWriteStore:  The json data provided by the creation arguments 
is malformed.  Items within the list have identifier: [id].  
Value collided: [105right234]"

同じアイテムを構造体に2回表示する場合は、構造体がどのように_reference使用されているかを確認する必要があります。

http://dojotoolkit.org/reference-guide/1.8/dojo/data/ItemFileReadStore.html#input-data-format


2番目のデータセットはストアに正常に読み込まれます。

次のコードは、Dojoウィジェットには適していません。

treeObject.model.store = newStore;
treeObject.model.query = {"type": "parent"};
treeObject.rootId = "root";
treeObject.rootLabel = "Table content";
treeObject.childrenAttrs = ["children"];
treeObject.showRoot = false;

DojoはmyWidget.set('model'、new model);の規則を使用します。これにより、カスタムセッターロジックが可能になります。詳細については、このリンクを参照してください。

http://dojotoolkit.org/reference-guide/1.8/quickstart/writingWidgets.html#custom-setters-getters

私はあなたのデータを使用してツリーを作成する別のフィドルを作成しました。

http://jsfiddle.net/cswing/5Yjx9/

于 2013-02-13T14:35:18.930 に答える