我找不到将数据库源添加到 dgrid 的优雅方法

Posted

技术标签:

【中文标题】我找不到将数据库源添加到 dgrid 的优雅方法【英文标题】:I can't find an elegant way to add a Database Source to a dgrid 【发布时间】:2015-02-11 09:05:19 【问题描述】:

现在我有

require([
            "dojo/on", "dgrid/OnDemandGrid","dgrid/Tree","dgrid/Editor", "dgrid/Keyboard", "dojo/_base/declare",
            "dgrid/data/createHierarchicalStore", "data/projects_data",
            "dojo/domReady!"
        ], function(
            on, Grid, Tree, Editor, Keyboard, declare, createHierarchicalStore, hierarchicalCountryData
        )
            var count = 0; // for incrementing edits from button under 1st grid

            function nbspFormatter(value)
                // returns " " for blank content, to prevent cell collapsing
                return value === undefined || value === "" ? " " : value;
            

            var StandardGrid = declare([Grid, Keyboard, Editor, Tree]);

            window.grid = new StandardGrid(
                collection: createHierarchicalStore( data: hierarchicalCountryData , true),
                columns: [
                    renderExpando: true, label: "Name", field:"variant_name", sortable: false, editor: "text", editOn: "dblclick",
                    label: "Visited", field: "bool", sortable: false, editor: "checkbox",
                    label:"Project", field:"project", sortable: false, editor: "text", editOn: "dblclick",
                    label:"locked", field:"locked", editor: "text", editOn: "dblclick",
                    label:"modified", field:"modified", editor: "text", editOn: "dblclick",
                    label:"summary", field:"summary", editor: "text", editOn: "dblclick"
                ]
            , "treeGrid2");

                grid.on("dgrid-datachange", function(evt)
                    console.log("data changed: ", evt.oldValue, " -> ", evt.value);
                    console.log("cell: ", evt.cell.row.id, evt.cell.column.field);
                );
                grid.on("dgrid-editor-show", function(evt)
                    console.log("show editOn editor: ", evt);
                );
                grid.on("dgrid-editor-hide", function(evt)
                    console.log("hide editOn editor: ", evt);
                );
        );

data/projects 是一个包含数据的 js 文件。但是现在如何将这个 dGrid 连接到 mysql 数据库?在文档中找不到任何好的信息。我认为可能与 JSON 休息有关,但对此不确定。

补充: 我可以在 html 表中显示数据库。是否有合适的可能性从 HTML 表中填充 dGrid?

我仍然缺少一些东西。有来自的连接 数据库 -> php 但无法将正确的 JS 加载到 dStore 中。

【问题讨论】:

这是一个非常广泛的主题,您能否告诉我们您正在使用哪些其他技术,以及您的应用程序将在内部使用还是为公众使用。是否对这些数据进行身份验证或对公众开放。还是会在内部调用?一大堆问题,请更具体。 数据库可能在同一台服务器上或至少在内部服务器上。使用的技术...bower、html5、javascript、mysql。没什么特别的+ 正如我所提到的,您需要更具体一些,如果没有中间的一些服务,您将无法在 javascript 中对您的服务器进行查询。您是在中间使用 .net MVC 还是 php,还是基于客户端的所有项目? 是的一种 mvc,中间应该是 php...缺少的链接是如何从 php dgrid 中获取 json 理解。我认为 在最好的情况下,它可能使用 jquery ajax 来实现 【参考方案1】:

最简单的方法是使用您选择的服务器端语言(在这种情况下听起来像 PHP)编写一个服务,该服务根据您的 MySQL 数据库中的数据生成 JSON 输出。根据数据的潜在大小,您可以将数据设计为与 dstore 中的两个开箱即用存储之一一起使用:Request(如果还涉及写入操作,则为Rest),或@ 987654323@.

两者中更简单的是RequestMemory,它简单地将Memory 存储的功能与预先服务器请求(通过Request)结合起来。此存储将期望服务以一个完整的数据有效负载进行响应:一个对象数组,其中每个对象都是数据库中的一条记录。像这样的:

[
    
        "id": 1,
        "foo": "bar"
    ,
    
        "id": 2,
        "foo": "baz"
    
]

Rest 存储需要相同格式的数据,还需要服务处理过滤、排序和范围。过滤和排序通过查询字符串参数表示(例如,foo=bar&baz=bim 在最简单的情况下用于过滤,sort(+foo)sort(-foo) 用于排序),而范围通常通过 HTTP Range 标头表示(例如,Range: Items 0-9 用于前 10 项)。

Rest 存储实现服务显然需要更多的工作,但如果您希望您的数据源可能包含数千个项目,则更可取,因为RequestMemory 将别无选择,只能请求所有前期项目。

对于这些存储中的任何一个,一旦您有一个可以根据需要输出 JSON 的服务,您就可以创建一个存储实例,其 target 指向服务端点,然后通过 collection 将其传递到网格属性。

如果您的数据旨在表示层次结构,则仍然可以将dstore/Tree 混合到dstore/RequestMemorydstore/Request 中,前提是您的层次结构是通过父 ID 引用表示的。默认情况下,Tree 通过每个项目的parent 属性过滤子项,并通过检查每个项目的hasChildren 属性报告mayHaveChildren 结果。

【讨论】:

以上是关于我找不到将数据库源添加到 dgrid 的优雅方法的主要内容,如果未能解决你的问题,请参考以下文章

我找不到在 Android Studio 中创建的 recyclerview 的 setOnItemClickListener

如果我找不到我的 emacs 初始化文件怎么办?

我找不到将熊猫时间戳转换为 matplotlib 图的日期的方法

在项目中移动文件,现在我找不到命名空间

在 Powershell 中优雅地停止

我需要将 DOT 语言用于 python 程序,但我找不到方法