Dgrid 和 Django Rest 框架 (JsonRest)
Dgrid and Django Rest Framework (JsonRest)
6.30.15 - 我怎样才能使这个问题更好,对其他人更有帮助?反馈会很有帮助。谢谢!
我正在使用 dojo 的 dgrid 创建一个按需网格。我无法连接到商店。我可以显示 headers 列,但我无法显示任何数据,这里是我正在使用的代码。为保密起见更改了一些数据。任何帮助将不胜感激。 Json 正在从 Django Rest Framework api.
中提取
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dgrid Test</title>
<link a ref
</head>
<body>
<div id="grid"></div>
<script src="/static/web/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require([
'dojo/_base/declare',
'dojo/data/ObjectStore',
'dojo/store/JsonRest',
'dojo/store/Memory',
'dgrid/OnDemandGrid',
'dojo/domReady!'], function (declare, ObjectStore, Memory, JsonRest, OnDemandGrid) {
var grid = new OnDemandGrid({
collection: new dojo.store.JsonRest({target:"/api/storeName/"}),
columns: {
id: 'ID',
column1: 'column1',
column2: 'column2',
column3: 'column3',
column4: 'column4',
column5:'column5',
column6:'column6',
column7:'column7',
column8: 'column8'
}
}, 'grid');
grid.startup();
});
</script>
更新 -
dstore/Rest 已应用 - 仍然无法拉取 data.Now 列 headers 也不显示...
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dgrid Test</title>
</head>
<body>
<div id="grid"></div>
<script src="/static/web_ui/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require([
'dojo/_base/declare',
'dojo/dom',
'dojo/on',
'dstore/Rest',
'dgrid/OnDemandGrid',
'dojo/domReady!'
], function (declare, dom, on, Rest, OnDemandGrid) {
// Create an instance of OnDemandGrid referencing the store
var store = new Rest({ target:"/api/apiname/" });
});
var grid = new OnDemandGrid({
collection: store,
columns: {
column1: 'column1',
column2: 'column2',
column3: 'column3',
column4: 'column4',
column5:'column5',
column6:'column6',
column7:'column7',
column8: 'column8'
}
}, 'grid');
grid.startup();
更新 6.2.15
这是我今天早上一直在处理的修改后的代码。这是 Firebug 中出现的错误:TypeError: transform(...) is null
return transform(value, key).toString();
仪器...tion.js(第 20 行)
这真的没有任何意义。我不知道该错误是否阻止了数据的实际显示。无论我做什么,它都不会显示。明天将花两周时间处理这件事。编程的乐趣。 :)
这是代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dgrid Test</title>
</head>
<body>
<h1>Demo: Single-Query Mixin</h1>
<form id="queryForm">
<label for="lastField">Blank Blank contains:</label>
<input id="lastField" name="blank_type">
<button type="submit">Filter</button>
<button type="reset">Reset</button>
</form>
<div id="grid"></div>
<script src="/static/web_ui/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require([
'dojo/_base/declare',
'dojo/dom',
'dojo/on',
'dstore/Rest',
'dstore/Request',
//'dstore/RequestMemory',
'dgrid/extensions/Pagination',
'dgrid/OnDemandGrid',
'dstore/Trackable',
'dojo/domReady!'
], function (declare, dom, on, Rest, Request, Pagination, OnDemandGrid, Trackable) {
// Create an instance of OnDemandGrid referencing the store
var data = [];
for (var i = 0; i < 100; i++) {
data[i] = {
id: i + 1,
name: '' + (i + 1),
value: i + 1
};
}
var store = new (declare([Rest, Trackable]))({
target:'http://localhost:8000/api/XXXXXXXXX/?format=json',
range:items=0-25,
idProperty: 'id',
data: data
});
var grid = new (declare([OnDemandGrid, Pagination]))({
collection: store,
columns: [
{label:"ID", field:"id"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"}
]
}, 'grid');
grid.startup();
});
</script>
</body>
</html>
如果点击错误中的link,这是代码。
网格本身显示在浏览器中;按钮、列 headers... 一切...只是没有数据。在终端(服务器信息)中:显示:[02/Jun/2015 13:38:18] "GET /api/XXXXXXXXX/?format=json&limit(25) HTTP/1.1" 200 1631
[02/Jun/2015 13:38:18] "GET /api/XXXXXX/?format=json&limit(10) HTTP/1.1" 200 1631
// | }
// | );
thisObject = thisObject || kernel.global;
transform = transform ?
lang.hitch(thisObject, transform) : function(v){ return v; };
return template.replace(/$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
function(match, key, format){
var value = lang.getObject(key, false, map);
if(format){
value = lang.getObject(format, false, thisObject).call(thisObject, value, key);
}
return transform(value, key).toString();
}); // String
};
string.trim = String.prototype.trim ?
lang.trim : // aliasing to the native function
function(str){
str = str.replace(/^\s+/, '');
for(var i = str.length - 1; i >= 0; i--){
if(/\S/.test(str.charAt(i))){
str = str.substring(0, i + 1);
break;
}
}
return str;
};
更新 6.3.15
这是尝试创建自定义商店以满足要求的新代码
<script>
define([
'dojo/_base/lang',
'dojo/_base/declare',
'dojo/dom',
'dojo/on',
'dstore/Store',
'dojo/Request',
'dojo/store/Observable',
'dgrid/extensions/Pagination',
'dgrid/OnDemandGrid',
'dstore/QueryResults',
'dojo/domReady!'
], function (lang, declare, dom, on, Store, Request, Observable, Pagination, OnDemandGrid, QueryResults) {
// Create an instance of OnDemandGrid referencing the store
return declare(Observable(Store, {
apiUrl:'http://localhost:8000/api/table/?format=json',
headers: {
Accept: 'application/json.rest_framework.v3+json'
},
'Content-Range':items=0-25/765,
_request:function (target, options) {
options = lang.mixin({ handleAs:'json'}, options);
options.headers = lang.mixin({}, this.headers, options.headers);
return request(this.apirUrl + target, options);
},
get: function (id) {
return this._request('api/table/'+ encodeURIComponent(id),{
method: 'GET'
});
},
fetch: function(){
return new QueryResults(this._request('/api/table'));
}
}));
var grid = new (declare([OnDemandGrid, Pagination]))({
collection: store,
columns: {
{label:"ID", field:"id"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"}
}
}, 'grid');
grid.startup();
});
</script>
这个问题已经开始变形,所以我对我的答案进行了一些格式化以尝试匹配,所以它仍然有些连贯。
问题 1:dgrid 版本与商店 API 在使用中
dgrid 0.4 与 dstore 商店接口,而不是 dojo/store
,这就是为什么您最终没有显示任何数据的原因。
dstore/Rest
应该可以用作 dojo/store/JsonRest
的主要替代品,尽管您可能希望 fiddle 与它继承自 Request 的某些 options .
如果您之前使用的是 dgrid 0.3,migration guide has a section covering the store API change. The Using Grids and Stores 教程也针对 dgrid 0.4 和 dstore 进行了更新。
问题2:服务器返回的数据格式
dstore/Rest
对其所连接的服务有特定的期望才能正常工作。另一个关于这个的问题突然出现,所以我有一个关于细节的答案there。
问题 3:"transform(...) is null return transform(value, key).toString();"
这听起来与原始问题基本无关,但最常见的原因是小部件模板通过 ${...}
引用了 属性,而小部件中实际上并不存在。
我已经为这个 Dojo/Django 问题反复研究了将近一个月。问题是 Django Rest Framework API 和 dojo / dgrid 分页之间的兼容性问题。我从 Sitepen 的 Ken Franqueiro 和 Dylan 那里得到了一些很棒的帮助。在与他们来回交谈之后(并且激怒了他们,我确定...:)他们帮助我确定了几件事。
Dgrid 0.3 最适合 Dojo/store - Dgrid 0.4 最适合 dstore。但是,为了使其与 Django Rest Framework 一起正常工作 - Limit/Offset 必须在 settings.py 的 Django Rest Framework 设置中设置分页。
# Django REST Framework configuration overrides
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination'
}
Ken 还建议我必须创建一个自定义商店才能使其完全正常工作。在实施分页设置后,使用 Dojo 1.8 和 dgrid 0.3.0(dojo/store/JsonRest 和请求)工作得很好。
经过三个漫长的星期(一天)处理这个 One 问题,我非常感谢数据显示在 dgrid 中,我可以继续下一件事。非常感谢 Ken 和 Dylan 的帮助(和耐心)! :)
6.30.15 - 我怎样才能使这个问题更好,对其他人更有帮助?反馈会很有帮助。谢谢!
我正在使用 dojo 的 dgrid 创建一个按需网格。我无法连接到商店。我可以显示 headers 列,但我无法显示任何数据,这里是我正在使用的代码。为保密起见更改了一些数据。任何帮助将不胜感激。 Json 正在从 Django Rest Framework api.
中提取 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dgrid Test</title>
<link a ref
</head>
<body>
<div id="grid"></div>
<script src="/static/web/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require([
'dojo/_base/declare',
'dojo/data/ObjectStore',
'dojo/store/JsonRest',
'dojo/store/Memory',
'dgrid/OnDemandGrid',
'dojo/domReady!'], function (declare, ObjectStore, Memory, JsonRest, OnDemandGrid) {
var grid = new OnDemandGrid({
collection: new dojo.store.JsonRest({target:"/api/storeName/"}),
columns: {
id: 'ID',
column1: 'column1',
column2: 'column2',
column3: 'column3',
column4: 'column4',
column5:'column5',
column6:'column6',
column7:'column7',
column8: 'column8'
}
}, 'grid');
grid.startup();
});
</script>
更新 - dstore/Rest 已应用 - 仍然无法拉取 data.Now 列 headers 也不显示...
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dgrid Test</title>
</head>
<body>
<div id="grid"></div>
<script src="/static/web_ui/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require([
'dojo/_base/declare',
'dojo/dom',
'dojo/on',
'dstore/Rest',
'dgrid/OnDemandGrid',
'dojo/domReady!'
], function (declare, dom, on, Rest, OnDemandGrid) {
// Create an instance of OnDemandGrid referencing the store
var store = new Rest({ target:"/api/apiname/" });
});
var grid = new OnDemandGrid({
collection: store,
columns: {
column1: 'column1',
column2: 'column2',
column3: 'column3',
column4: 'column4',
column5:'column5',
column6:'column6',
column7:'column7',
column8: 'column8'
}
}, 'grid');
grid.startup();
更新 6.2.15
这是我今天早上一直在处理的修改后的代码。这是 Firebug 中出现的错误:TypeError: transform(...) is null return transform(value, key).toString(); 仪器...tion.js(第 20 行)
这真的没有任何意义。我不知道该错误是否阻止了数据的实际显示。无论我做什么,它都不会显示。明天将花两周时间处理这件事。编程的乐趣。 :)
这是代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dgrid Test</title>
</head>
<body>
<h1>Demo: Single-Query Mixin</h1>
<form id="queryForm">
<label for="lastField">Blank Blank contains:</label>
<input id="lastField" name="blank_type">
<button type="submit">Filter</button>
<button type="reset">Reset</button>
</form>
<div id="grid"></div>
<script src="/static/web_ui/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require([
'dojo/_base/declare',
'dojo/dom',
'dojo/on',
'dstore/Rest',
'dstore/Request',
//'dstore/RequestMemory',
'dgrid/extensions/Pagination',
'dgrid/OnDemandGrid',
'dstore/Trackable',
'dojo/domReady!'
], function (declare, dom, on, Rest, Request, Pagination, OnDemandGrid, Trackable) {
// Create an instance of OnDemandGrid referencing the store
var data = [];
for (var i = 0; i < 100; i++) {
data[i] = {
id: i + 1,
name: '' + (i + 1),
value: i + 1
};
}
var store = new (declare([Rest, Trackable]))({
target:'http://localhost:8000/api/XXXXXXXXX/?format=json',
range:items=0-25,
idProperty: 'id',
data: data
});
var grid = new (declare([OnDemandGrid, Pagination]))({
collection: store,
columns: [
{label:"ID", field:"id"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"}
]
}, 'grid');
grid.startup();
});
</script>
</body>
</html>
如果点击错误中的link,这是代码。 网格本身显示在浏览器中;按钮、列 headers... 一切...只是没有数据。在终端(服务器信息)中:显示:[02/Jun/2015 13:38:18] "GET /api/XXXXXXXXX/?format=json&limit(25) HTTP/1.1" 200 1631 [02/Jun/2015 13:38:18] "GET /api/XXXXXX/?format=json&limit(10) HTTP/1.1" 200 1631
// | }
// | );
thisObject = thisObject || kernel.global;
transform = transform ?
lang.hitch(thisObject, transform) : function(v){ return v; };
return template.replace(/$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
function(match, key, format){
var value = lang.getObject(key, false, map);
if(format){
value = lang.getObject(format, false, thisObject).call(thisObject, value, key);
}
return transform(value, key).toString();
}); // String
};
string.trim = String.prototype.trim ?
lang.trim : // aliasing to the native function
function(str){
str = str.replace(/^\s+/, '');
for(var i = str.length - 1; i >= 0; i--){
if(/\S/.test(str.charAt(i))){
str = str.substring(0, i + 1);
break;
}
}
return str;
};
更新 6.3.15 这是尝试创建自定义商店以满足要求的新代码
<script>
define([
'dojo/_base/lang',
'dojo/_base/declare',
'dojo/dom',
'dojo/on',
'dstore/Store',
'dojo/Request',
'dojo/store/Observable',
'dgrid/extensions/Pagination',
'dgrid/OnDemandGrid',
'dstore/QueryResults',
'dojo/domReady!'
], function (lang, declare, dom, on, Store, Request, Observable, Pagination, OnDemandGrid, QueryResults) {
// Create an instance of OnDemandGrid referencing the store
return declare(Observable(Store, {
apiUrl:'http://localhost:8000/api/table/?format=json',
headers: {
Accept: 'application/json.rest_framework.v3+json'
},
'Content-Range':items=0-25/765,
_request:function (target, options) {
options = lang.mixin({ handleAs:'json'}, options);
options.headers = lang.mixin({}, this.headers, options.headers);
return request(this.apirUrl + target, options);
},
get: function (id) {
return this._request('api/table/'+ encodeURIComponent(id),{
method: 'GET'
});
},
fetch: function(){
return new QueryResults(this._request('/api/table'));
}
}));
var grid = new (declare([OnDemandGrid, Pagination]))({
collection: store,
columns: {
{label:"ID", field:"id"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"},
{label:"XXXXXXXXX", field:"XXXXXXXXX"}
}
}, 'grid');
grid.startup();
});
</script>
这个问题已经开始变形,所以我对我的答案进行了一些格式化以尝试匹配,所以它仍然有些连贯。
问题 1:dgrid 版本与商店 API 在使用中
dgrid 0.4 与 dstore 商店接口,而不是 dojo/store
,这就是为什么您最终没有显示任何数据的原因。
dstore/Rest
应该可以用作 dojo/store/JsonRest
的主要替代品,尽管您可能希望 fiddle 与它继承自 Request 的某些 options .
如果您之前使用的是 dgrid 0.3,migration guide has a section covering the store API change. The Using Grids and Stores 教程也针对 dgrid 0.4 和 dstore 进行了更新。
问题2:服务器返回的数据格式
dstore/Rest
对其所连接的服务有特定的期望才能正常工作。另一个关于这个的问题突然出现,所以我有一个关于细节的答案there。
问题 3:"transform(...) is null return transform(value, key).toString();"
这听起来与原始问题基本无关,但最常见的原因是小部件模板通过 ${...}
引用了 属性,而小部件中实际上并不存在。
我已经为这个 Dojo/Django 问题反复研究了将近一个月。问题是 Django Rest Framework API 和 dojo / dgrid 分页之间的兼容性问题。我从 Sitepen 的 Ken Franqueiro 和 Dylan 那里得到了一些很棒的帮助。在与他们来回交谈之后(并且激怒了他们,我确定...:)他们帮助我确定了几件事。
Dgrid 0.3 最适合 Dojo/store - Dgrid 0.4 最适合 dstore。但是,为了使其与 Django Rest Framework 一起正常工作 - Limit/Offset 必须在 settings.py 的 Django Rest Framework 设置中设置分页。
# Django REST Framework configuration overrides
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination'
}
Ken 还建议我必须创建一个自定义商店才能使其完全正常工作。在实施分页设置后,使用 Dojo 1.8 和 dgrid 0.3.0(dojo/store/JsonRest 和请求)工作得很好。
经过三个漫长的星期(一天)处理这个 One 问题,我非常感谢数据显示在 dgrid 中,我可以继续下一件事。非常感谢 Ken 和 Dylan 的帮助(和耐心)! :)