3

まず、dojo 1.1.0 と dgrid 0.4.0 を使用しています。いくつかの dgrid を含むページを作成しています。特に 1 つのグリッドは、URL から JSON データをロードして表示する必要があります。現在、RequestMemory ストアでそれを行うと問題なく動作します。ただし、これは「メモリ」ストアです。これは他の人にとっては些細なことかもしれませんが、現在行われているようにデータをロードする方法を見つけてから、必要な関数/メソッドを呼び出す更新ボタンを画面に追加して、URL からデータをリロードし、 dgrid を再設定します。

JSON データは、次のようにフォーマットされた URL から取得されます。

[{"id":1,"name":"trans1","username":"trans1","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":true},{"id":2,"name":"trans2","username":"trans2","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":true},{"id":3,"name":"trans3","username":"trans3","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false},{"id":4,"name":"trans4","username":"trans4","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false},{"id":5,"name":"trans5","username":"trans5","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false},{"id":6,"name":"trans6","username":"trans6","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false}]

以下に表示される Require には、実際にはこのグリッドだけでなく、さらに多くの要素が含まれています。

ローカル ストアを更新する必要も、URL の変更を監視する必要もありません。オンデマンドで URL からデータをリロードできるようにしたいだけです。

これは、グリッドの初期ロード (作業中) に現在使用しているコードと、作業に必要な更新ボタンです。

require([ 'dojo/store/Observable' ,'dijit/Dialog', 'dijit/form/Select', 'dijit/form/MultiSelect', 'dijit/form/TextBox', 'dijit/layout/TabContainer', 'dijit/layout/ContentPane','dojo/request', 'dojo/request/xhr', 'dijit/form/ToggleButton', 'dijit/form/Button', 'dojo/parser', 'dojo/_base/declare', 'dgrid/Grid', 'dgrid/Selection', 'dgrid/Editor', 'dgrid/extensions/ColumnHider', 'dgrid/extensions/Pagination', 'dstore/RequestMemory', 'dijit/form/Select', 'dijit/registry','dojox/data/XmlStore', 'dojo/domReady!'], function (Observable, Dialog, Select, MultiSelect, TextBox, TabContainer, ContentPane, request, xhr, ToggleButton, Button, parser, declare, Grid, Selection, Editor, ColumnHider, Pagination, RequestMemory, Select, registry, XmlStore) {


//workers dgrid
    var workersStore = new RequestMemory({ target: '/autoAssign/getWorkers.aa?TASKTYPE=transport&INACTIVE=FALSE' });        
    var workerGrid = new (declare([ Grid, Selection, Pagination, Editor, ColumnHider ]))({
        collection: workersStore,
        className: 'dgrid-autoheight',
        id: 'workerGrid',
        rowsPerPage: 6,
        columns: {
            name: 'Name',
            username: {
                label: 'username',
                hidden: true
            },
            status: 'Status',
            assignedNum: 'Assigned',
            completedNum: 'Completed',
            avgTime: 'Average',
            aaOn: {
		      label: 'Auto Assign',
		      editor: 'checkbox',
                  }
        }
    }, 'gridNode');
    workerGrid.on("dgrid-datachange",function(evt) {
       var row = workerGrid.row(evt); 
       if (evt.cell.column.id == 'aaOn') {
           var promise = request('/autoAssign/setUserAaStatus.aa?USERNAME='+row.data.username+'&TASKTYPE=transport&STATUS='+evt.value);
       }
    });
    workerGrid.startup();


//Add refresh Button
      var addRefreshButton = new Button({
        label: "Refresh",
        style: 'float:right;',
        onClick: function(){
           var promise = workersStore.fetch();
           var result = promise.then(function(data){
               workerGrid.set("collection", workersStore);
               workerGrid.refresh();
               alert("refresh pushed");
           });
        }
    }, "refresh").startup(); 


}

[{"id":1,"name":"trans1","username":"trans1","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":true},{"id":2,"name":"trans2","username":"trans2","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":true},{"id":3,"name":"trans3","username":"trans3","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false},{"id":4,"name":"trans4","username":"trans4","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false},{"id":5,"name":"trans5","username":"trans5","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false},{"id":6,"name":"trans6","username":"trans6","status":"Available","inactive":"no","checkedout":"false","details":"","assignedNum":"0","completedNum":"0","avgTime":"00:00","aaOn":false}]

どんな助けでも大歓迎です。以前は Dojo の古いデータグリッドでこれを行っていましたが、ここで欠けているものを把握できないようです。

4

1 に答える 1

6

技術的には、必要なことを行うには、ある意味でローカル ストアを更新する必要があります。 dstore/RequestMemoryは基本的に と の構成でdstore/Requestありdstore/Cache、単一のfetchリクエストがすぐに実行され、その後キャッシング ストア フィールドが将来のすべてのフェッチ操作に使用されます。ストアをサーバーから強制的に更新するには、基本的にストアにキャッシュが無効であることを伝え、サーバーからすべてのアイテムを再リクエストする必要があります。これは次のようになります。

workersStore.invalidate(); // Invalidate the cache
workersStore.fetch(); // Perform a new request for all items
workerGrid.refresh();

それfetchが実行されると、Cacheストアはメモリ内ストアからすべての要求をプルできることを認識します。

(fetch呼び出しは重要です。上記の呼び出しを行わないとfetch、グリッドが期待どおりに機能しない可能性があります。dgrid の OnDemandGrid および Pagination モジュールはfetchRange、 を使用して範囲指定クエリを実行します。ストアのデータがすべてあることを Cache が認識しない限り、単純にこれらは元のストア (この場合は Request) に渡され、サーバーにアクセスしようとしますが、サービスはおそらく範囲指定クエリを処理する機能を備えていないため、毎回データ セット全体を返すだけです)。

確かに、これは RequestMemory を使用している人が知る必要がある情報よりも多くの情報であると私は主張しますtarget。ただし、上記の 3 行のコードは TL;DR です。

于 2015-02-27T02:07:22.470 に答える