【问题标题】:creating dojo datagrid programmatically "sorry an error occured"以编程方式创建 dojo 数据网格“抱歉发生错误”
【发布时间】: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();

我不知道哪里出了问题,请帮帮我。

【问题讨论】:

  • 这是您第三次向我们展示您没有正确理解概念。我认为让您理解的唯一方法是,您发布一个更具代表性的 arrayobjects,您想用它来填充网格。
  • 哥们,我已经将我的 json 转换为对象数组,我是 DOJO 的新手,如果你有解决方案,请告诉我
  • 希望有帮助,这是我最后一次尝试
  • FWIW 我了解到,如果您使用的标识符不是唯一的,就会发生这种情况。当我有一个据称包含唯一值但实际上没有(垃圾输入,垃圾输出)的字段时,这给我带来了问题。

标签: datagrid dojo


【解决方案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"}
    ];

...objects 存储在 array 中。就那么简单。

现在到您的layout var

它应该描述您的DataGridstructure 与其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-选项,但我不知道这是否是可选的(参见小提琴)
  • 我觉得是可选的,这里就不提了stackoverflow.com/questions/7054546/…
  • 好的,看看小提琴并比较你的代码。它在那里工作,只是样式表无缘无故丢失。如果您解决了您的问题,请将问题标记为已解决。否则,提供更多代码,报告问题的小提琴将不胜感激;)
【解决方案2】:

不确定这是否会有所帮助,但在您发布的示例代码中,您在其中一项中拼错了“Property”一词,而其他两项中的“Property”一词拼写正确。请参阅具有属性 key1 的项目。您必须确保所有字段名称的拼写一致。

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 2017-02-07
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2015-03-10
    • 1970-01-01
    相关资源
    最近更新 更多