2016-06-06 7 views
1

Ich habe jetzt diesen Code:Wie verwendet man dojox/data/JsonRestStore mit dojox/grid/LazyTreeGrid?

define([ 
    "dojo/_base/declare", 
    "dojox/data/JsonRestStore", 
    "dojox/grid/LazyTreeGrid", 
    "dojox/grid/LazyTreeGridStoreModel" 
], function(
    declare, 
    JsonRestStore, 
    LazyTreeGrid, 
    LazyTreeGridStoreModel 
) { 
    var layout = { ... }, 
     store = new JsonRestStore({ 
      target: "/api/items" // for example 
      limitParam: "limit", 
      offsetParam: "offset" 
     }), 

     model = new LazyTreeGridStoreModel({ 
      serverStore: true, 
      store: store, 
      childrenAttrs: [ "children" ] 
     }); 

    return declare("CustomTreeGrid", [ LazyTreeGrid ], { 
     treeModel: model, 
     structure: layout 
    }); 
}); 

Mein Widget tausend Anfragen senden URL nach dem Start zum Ziel und mein Browser einfrieren. Wie man falsches Verhalten repariert und Kompatibilität mit RESTful API speichert?

Lösung mit QueryReadStore Arbeit, aber nicht in meiner Situation - Django REST Framework Rückseiteseite mit API-Deklaration auf GET-Anfragen.

Server Rückkehr Daten im JSON-Format:

{ 
    "items": [ ] //Array of items 
    "identifier": "id", 
    "numRows": 12 // Total count of items 
} 

auch ändern Sie die Server-Antwort-Array für die Rückgabe. Antwort-Header enthalten auch Schlüssel "Content-Range: 0-2/3" (zum Beispiel) und es funktioniert nicht für mich.

Server-Response-Header:

HTTP 200 OK 
Allow: GET, POST, HEAD, OPTIONS 
Content-Range: items 0-1/2 
Content-Type: application/json 
Vary: accept 

Server Antworttext:

[ 
    { 
     "id": 1, 
     "children": false, 
     "name": "name1" 
    }, 
    { 
     "id": 2, 
     "children": false, 
     "name": "name2" 
    } 
] 
+0

Glaubst du, du könntest das Backend irgendwie entlarven? Ihnen zu helfen, ohne debuggen zu können, ist schwierig. Außerdem wäre es nett, das Layout zu sehen, so dass wir ein funktionierendes Snippet erstellen können – ben

+0

Backend wird mit Django REST Framework geschrieben. Benutzer haben alle Berechtigungen, nach Start-Widget erstellen tausend Anfragen an API-URL. Server gibt Array mit jeder Antwort zurück, und das Raster ist leer. –

+0

das ist nicht was ich meine. Im tatsächlichen Zustand hat Ihre Frage nicht genug Details, um Ihnen zu helfen. Sie müssen ein Beispiel für die Back-End-Antwort teilen, die URLs, die das Frontend aufruft, das Layout, das Sie verwenden ... – ben

Antwort

2

Es ist ziemlich schwer, eine jsfiddle aus ihm zu machen, weil Sie den Server-Teil als auch benötigen.

fand ich diese Umsetzung: https://github.com/jeremyg484/dojo-json-rest-store

Es verwendet eine Kombination von: dojo.store.Cache, dojo.store.JsonRest, dojo.store.Memory und dojo.data.ObjectStore

Vielleicht können Sie etwas damit zu tun ... Sehen Sie, wie es verwendet wird:

myStore = dojo.store.Cache(dojo.store.JsonRest({target:"usstates/"}), dojo.store.Memory());
grid = new dojox.grid.DataGrid({store: dataStore = dojo.data.ObjectStore({objectStore: myStore})

+0

Mein Problem ist in fehlt-IDAsRef-Attribut für JsonRestStore. Es funktioniert gut. –