以编程方式创建 dojo 数据网格“抱歉发生错误”
Posted
技术标签:
【中文标题】以编程方式创建 dojo 数据网格“抱歉发生错误”【英文标题】:creating dojo datagrid programmatically "sorry an error occured" 【发布时间】:2012-11-29 19:14:42 【问题描述】:我正在尝试以编程方式创建 Dojo dojox.grid.DataGrid
。它正在创建但不显示输出,而是显示错误消息:“抱歉,发生错误”
代码如下:
var info=[
"Propery":"key1","Value":"value1",
"Property":"key2", "Value":"value2",
"Property":"key3","Value":"value3"
];
var layout = [
name: "Property",
field: 'Property',
width: "180px",
name: "Value",
field: 'Value',
width: "180px"
];
var myStore = new dojo.data.ItemFileReadStore(data:items:info);
var grid = new dojox.grid.DataGrid(
store: myStore,
structure: layout
,"myDiv");
grid.startup();
我不知道哪里出了问题,请帮帮我。
【问题讨论】:
这是您第三次向我们展示您没有正确理解概念。我认为让您理解的唯一方法是,您发布一个更具代表性的array
或 object
s,您想用它来填充网格。
哥们,我已经将我的 json 转换为对象数组,我是 DOJO 的新手,如果你有解决方案,请告诉我
希望有帮助,这是我最后一次尝试
FWIW 我了解到,如果您使用的标识符不是唯一的,就会发生这种情况。当我有一个据称包含唯一值但实际上没有(垃圾输入,垃圾输出)的字段时,这给我带来了问题。
【参考方案1】:
伙计,这就像我第三次回答你的问题。这让我想起了之前的两个,但无论如何我都会尝试一下。
您的示例无法运行,因为在您的layout
变量中,您引用了一个名为“属性”的field
,它在data.items
(info
) 中不存在。
您也没有正确理解json
-array
的概念。它应该代表一堆具有非常相似结构的对象。假设您要存储一些人,那么您将有一些keys
,例如名字、姓氏、年龄、性别等。每个人对此都有不同的值。 json
-array
看起来像这样:
var people = [
firstname: 'maja',
lastname: 'van hinten'
age: 23
gender: 'w',
firstname: 'willy',
lastname: 'wantstoknowit'
age: 11
gender: 'm',
firstname: 'helmut',
lastname: 'kohl'
age: 101
gender: 'm',
];
请注意,properties
的名称相似,只是值不同。
您尝试做的显然是将一个object
存储为array
,并使每个属性成为object
。想一想:[]
表示 array
, 在 javascript 中表示
object
。
事实上,你的info
-variable 应该是这样的:
var info = [
"key1": "value1",
"key2": "value2",
"key3": "value3"
];
如果你想存储更多对象,它看起来像这样:
var info = [
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key1": "value4",
"key2": "value5",
"key3": "value6",
"key1": "value7",
"key2": "value8",
"key3": "value9"
];
...object
s 存储在 array
中。就那么简单。
现在到您的layout var
:
它应该描述您的DataGrid
的structure
与其store
给出的数据相关。因此,它将列描述为一个整体,而不是单个单元格。
因此,您只能引用属性名称(key1、key2、key3 或 firstname、lastname、age、gender),但不能引用值,因为有时可能会有所不同。您只知道对象的结构,而不知道其实际内容。
因此,它应该是这样的:
var layout = [
name: "Key1's content", // you can name this whatever you want
field: 'key1', // but not this, it refers to the property name of your objects
width: "180px",
name: "Key2's content", // this could be named randomly too of course
field: "key2",
width: "180px",
name: "Key3's content", // and that one as well
field: "key3",
width: "180px"
];
【讨论】:
谢谢,真的很有帮助,但我的问题还是没有解决,我已经编辑过了,它只显示布局而不显示来自信息的数据,它只显示“对不起,发生错误” ,请看一下并帮助我 包装所有内容,但dojo.addOnLoad(function() /*all of the code here*/ );
中的 dojo.require(...)
-statements 类似于此 fiddle。不幸的是,加载样式表显然有问题,但是嘿!
您也忘记为DataGrid
设置query
-选项,但我不知道这是否是可选的(参见小提琴)
我觉得是可选的,这里就不提了***.com/questions/7054546/…
好的,看看小提琴并比较你的代码。它在那里工作,只是样式表无缘无故丢失。如果您解决了您的问题,请将问题标记为已解决。否则,提供更多代码,报告问题的小提琴将不胜感激;)【参考方案2】:
不确定这是否会有所帮助,但在您发布的示例代码中,您在其中一项中拼错了“Property”一词,而其他两项中的“Property”一词拼写正确。请参阅具有属性 key1 的项目。您必须确保所有字段名称的拼写一致。
【讨论】:
以上是关于以编程方式创建 dojo 数据网格“抱歉发生错误”的主要内容,如果未能解决你的问题,请参考以下文章