【问题标题】:extjs multiselect list from json string来自json字符串的extjs多选列表
【发布时间】:2011-07-28 22:58:36
【问题描述】:

我正在尝试从 json 商店创建一个多选列表,它是这种格式

[{"photo_id":1,"file_name":"test.JPG","x":123,"y":456},{"photo_id":2,"file_name":"test2.JPG","x":321,"y":765}]

多选列表会填充行,但不会在列表中显示文件名

var storeVar = new Ext.data.Store({
   extend: 'Ext.data.Model',
   fields: ['photo_id', 'file_name'],
   data: store // contains the json string
});

这里是多选框

Ext.create('Ext.form.Panel', {
bodyPadding: 10,
frame: true,
width: '100%',
items: [
    {
        anchor: '100%',
        displayField: 'file_name',
        valueField: 'photo_id',
        store: storeVar ,
        xtype: 'multiselect',
        fieldLabel: 'Select an image',
        allowBlank: false
    }
]
})

【问题讨论】:

  • 抱歉,您能否再次编辑您的帖子,因为您在 {..."y":456,{"photo_id...} 中提供了无效的 json 数据
  • 好的,我的错让我现在编辑它

标签: javascript extjs multi-select


【解决方案1】:

Grigor,您可以使用Ext.JSON.decode 将您的字符串解码为 json 格式:

var storeVar = new Ext.data.Store({
    extend: 'Ext.data.Model',
    fields: ['photo_id', 'file_name'],
    data: Ext.JSON.decode(store) // contains the json
});

Here is demo

【讨论】:

  • 你是很棒的分子。感谢您的回复。很有用!
  • 为什么我做 store.length 时会得到 110?显然,该字符串中没有 110 个结果。嗯
  • @Grigor, store.length 表示 store 作为对象包含的属性数量。有一个特殊的函数可以返回所有项目的数量 - store.getTotalCount().
  • 我最终这样做了eval('('+store+')').length
  • 如何将列表放入多选列表而不是启用多选属性的组合框?或者,如果那不可能,我将如何添加一个带有按住 shift 功能的选择,您可以在其中选择一个项目,按住 shift 并选择另一个项目,并且选择介于两者之间的任何内容?另外,如果那也不可能,我将如何让列表显示在网格中,然后将相同的移位选择功能添加到网格中?
【解决方案2】:

您将 Store 的创建与模型的定义混合在一起:行

extend: 'Ext.data.Model'

对商店没有影响,请查看文档docs中的示例

我无法评论/编辑问题,因此我将其写在新答案中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多