【问题标题】:Populate ExtJS combobox with JSON使用 JSON 填充 ExtJS 组合框
【发布时间】:2012-06-25 22:50:24
【问题描述】:

我正在使用 ExtJS (3),只是尝试使用正在使用 JSON 查询的数据库中的记录填充组合框/下拉列表。

这是我的 JSON 调用:

var projectDropDown = new Ext.data.Store({
    autoLoad: true,
    url: 'dropdown.json',
    storeId: 'projectDropDown',
    idProperty: 'ProjectID',
    fields: [ 'ProjectID', 'ProjectName' ]
});

然后是我的组合框代码:

{
    xtype: 'combo',
    id: 'ProjectName',
    fieldLabel: 'Project Name',
    valueField: 'ProjectID',
    displayField: 'ProjectName',
    store: projectDropDown,
    typeAhead: true,
    mode: 'local',
    triggerAction: 'all',
    emptyText:'Select a Project...',
    selectOnFocus:true
}

JSON 像这样返回我的数据:

[
   {
      "ProjectID":"1",
      "ProjectName":"Mike's Test Project"
   },
   {
      "ProjectID":"2",
      "ProjectName":"My Second Test Project"
   },
   {
      "ProjectID":"3",
      "ProjectName":"My Third Project"
   },
   {
      "ProjectID":"6",
      "ProjectName":"More testing from me"
   }
]

我想我已经很接近了,我只是看不出我缺少什么来建立联系。

感谢您的帮助。

【问题讨论】:

    标签: javascript extjs combobox extjs3


    【解决方案1】:

    我要做的第一步是将存储(或存储的大小或其他内容)输出到控制台,以查看数据是否正确加载到存储中。

    我的猜测是您需要将返回的 JSON 封装到某个根对象中。尝试为您的商店提供一个 JSONReader 并指定一个 root 元素,如下所示:

    var projectDropDown = new Ext.data.Store({
        autoLoad: true,
        url: 'dropdown.json',
        storeId: 'projectDropDown',
        reader: new Ext.data.JsonReader(
        {
            root: 'projects'
        }),
        idProperty: 'ProjectID',
        fields: [ 'ProjectID', 'ProjectName' ]
    });
    

    然后将返回的 JSON 改为如下所示

    {
        "projects" : [
           {"ProjectID":"1","ProjectName":"Mike's Test Project"},
           {"ProjectID":"2","ProjectName":"My Second Test Project"},
           ....
        ]
    }
    

    【讨论】:

    • 如何改变返回的 JSON?我不知道该怎么做或叫什么
    • @Mike 或者实际上,现在我看看它只是从 JSON 文件中提取的吗?像文本文档一样编辑它
    • 我能够更改返回 JSON 的代码,所以现在它看起来像您列出的内容: {"projects" : [[{"ProjectID":"1","ProjectName":" Mike 的测试项目"},{"ProjectID":"2","ProjectName":"我的第二个测试项目"},{"ProjectID":"3","ProjectName":"我的第三个项目"},{"ProjectID ":"6","ProjectName":"More testing from me"}]]} 但是当我添加以下行时: reader: new Ext.data.JsonReader( { root: 'projects' },我得到一个错误并且Firebug 在参数列表后告诉我“缺少 )”
    • 我猜我的商店的创建方式有问题 - 在 Firebug 中,“projectDropDown”变量中没有数据项......?
    • 好的,我发现了问题并解决了问题,它在查询数据库的代码中,我使用了另一个文件中的 sn-p 代码进行测试,它可以正常工作,所以我一直在比较两者,现在它正在填充,至少它有效 - 感谢您的帮助
    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多