以编程方式创建 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();

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

【问题讨论】:

这是您第三次向我们展示您没有正确理解概念。我认为让您理解的唯一方法是,您发布一个更具代表性的 arrayobjects,您想用它来填充网格。 哥们,我已经将我的 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。想一想:[] 表示 arrayjavascript 中表示 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-选项,但我不知道这是否是可选的(参见小提琴) 我觉得是可选的,这里就不提了***.com/questions/7054546/… 好的,看看小提琴并比较你的代码。它在那里工作,只是样式表无缘无故丢失。如果您解决了您的问题,请将问题标记为已解决。否则,提供更多代码,报告问题的小提琴将不胜感激;)【参考方案2】:

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

【讨论】:

以上是关于以编程方式创建 dojo 数据网格“抱歉发生错误”的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式使 dojo 数据网格单元跨越多列

dojo 增强网格过滤器 - 以编程方式设置列 A 大于某个数字

在dojo内通过编程方式在网格中添加单选按钮

dojo中以编程方式与以声明方式创建的小部件之间的区别?

Dojo vs JQuery 编程小部件创建

Dojo 以编程方式验证 TextBox