Extjs 组合框根据属性显示商店记录

Posted

技术标签:

【中文标题】Extjs 组合框根据属性显示商店记录【英文标题】:Extjs combobox to display store records based on a property 【发布时间】:2017-11-17 23:07:20 【问题描述】:

我是 Sencha 的新手,我的问题如下:

通过在组合框中调用商店“媒体”:

xtype: 'combobox', itemId: 'mediaPicker', store: Ext.create('web.store.Media'), fieldLabel: 'Image', emptyText: 'Choose an Image'

我收到了预期的媒体列表,但是,根据商店模型中的以下属性,我如何才能收到仅包含图像的列表:

name: 'type', type: 'int' ,

其中 type == 1 用于图像。

谢谢。

【问题讨论】:

请分享一个小提琴和你的 ExtJs 版本。您需要通过使用组合框或直接在商店中将过滤器传递给商店 - 您可能需要查看商店的 filterBy 函数。 【参考方案1】:

尝试实现这段代码:

var my_images_store  =  new Ext.data.JsonStore( 
                        url: 'myfilefunc.php'   
                        ,autoLoad: true
                        ,fields:[id,desc]
                        ,root: 'images'
                ); 

`

url: 把你的业务逻辑的 url 放在这里(例如 php 函数) fields:结果集返回的字段名称 root:结果集的名称

结果集示例:`


    images: [
        id: '1', desc:'x',
        id: '2', desc:'y'
    ]

`

【讨论】:

【参考方案2】:

您需要为商店添加过滤器。

store: Ext.create('web.store.Media') 更改为类似

store: Ext.create('web.store.Media',
    filters: [
        property: 'type',
        value: 1
        ])

注意:我不确定上面是否会进行严格的 === 或松散的 == 比较。如果它不适合您,那么您可以使用函数在商店中指定过滤器。查看商店过滤文档。

【讨论】:

据我所知,默认情况下它既不 === 也不 ==,只有 .toString().startsWith()。您必须将exactMatch:true 配置添加到过滤器才能获得==,并且您无法使用该属性实现===,只能通过一个函数。您可以亲自查看整个混乱情况here。

以上是关于Extjs 组合框根据属性显示商店记录的主要内容,如果未能解决你的问题,请参考以下文章

商店上的 extjs 组合框 getCount() 返回 0

ExtJS组合框无法渲染

extjs 组合框在单击时显示空白列表

Extjs - 如何填充组合框形成一个单一的商店?

在 ExtJs 中本地过滤组合框远程存储

如何让组合框选择与 ExtJS6 中显示的值不同的值?