我正在尝试创建自定义Store,它应该使用WebSocket或REST(如果WebSocket失败).
代码文件rachet-store.js
它几乎完美地工作.它也适用于REST(myRest)也没有问题.
问题是如果使用wsStore并且如果我删除datagrid中第一页或第二页上的行,则会通知datagrid并刷新自身.但是,如果我删除第三页或任何其他页面上的行,则不会刷新商店.
我认为问题可能在某处sort(),因为使用Grid(或Pagination)的工作原理.(但它只是一个猜测......)
所以,问题是,我做错了什么?
首先,我使用的是dojo 1.1.0和dgrid 0.4.0.我正在创建一个包含几个dgrids的页面.特别是一个网格需要从URL加载JSON数据并显示它.它目前使用RequestMemory存储工作正常.然而,这是一个"记忆"商店.虽然这对其他一些人来说可能是微不足道的,但我需要找到一种方法来加载现在正在完成的数据,然后在屏幕上添加一个刷新按钮,调用必要的函数/方法从网址重新加载数据.重新填充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}]
Run Code Online (Sandbox Code Playgroud)
要求你在下面看到实际上包含的不仅仅是这个网格...因此所有额外的.
我不需要更新本地商店,也不想监视更改的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: …Run Code Online (Sandbox Code Playgroud)在Dgrid 0.3.16我使用的是Observable商店,当我在商店中的数据发生变化时,我调用了商店通知功能.(不是'put',因为我只需要一个UI更新,这是一个特定的情况)
store.notify(object, existingId);
Run Code Online (Sandbox Code Playgroud)
我现在已将Dgrid升级到版本0.4,我使用'dstore'作为商店.商店是这样创建的:
var store = new declare([ Rest, SimpleQuery, Trackable, Cache, TreeStore ])(lang.mixin({
target:"/ac/api?fetchview",
idProperty:"$uniqueid",
useRangeHeaders: true
}, config));
store.getRootCollection = function (parent, options) {
return this.root.filter({parent: parent.$position},options);
};
store.getChildren = function (parent, options) {
return this.root.filter({parent: parent.$position},options);
};
store.mayHaveChildren = function (item) {
return item.$iscategory;
};
this.collection = store;
Run Code Online (Sandbox Code Playgroud)
如何更改一行而不调用"put"时如何通知商店?我需要dGrid重新渲染行.
我一直试图实时获取我的dgrid/dstore网格.正如我所理解的那样,函数'Observable'已被弃用,而且它也不适用于我.
我试图通过Interval计时器更新网格,然后整个网格被擦除并重新加载.如何更新整个网格'内联'而不删除,并显示'加载数据'?
这是我的基本代码:
var timer = setInterval(function() {
store.invalidate(); // Invalidate the cache
store.fetch(); // Perform a new request for all items
grid.refresh();
}, 500);
Run Code Online (Sandbox Code Playgroud)