【问题标题】:ExtJS 5.0.1 tagfieldExtJS 5.0.1 标记字段
【发布时间】:2014-11-05 14:28:08
【问题描述】:

谁能解释一下,我做错了什么?

我正在尝试加载数据以存储并在表单加载时选择其中的一些。

到目前为止,这是我想出的: https://fiddle.sencha.com/#fiddle/cjd

Ext.define('TagModel', {
    extend: 'Ext.data.Model',

    fields: [{
        name: 'some_id',
        type: 'int'
    }, {
        name: 'some_value',
        type: 'string'
    }]
});

Ext.define('MyPanel',{
    extend: 'Ext.panel.Panel',
    renderTo: Ext.getBody(),
    title: 'Some title',
    width: 200,
    heigh: 500,
    layout: 'anchor',
    items: [{
        xtype: 'tagfield',
        anchor: '100%',
        displayField: 'some_value',
        valueField: 'some_id',
        store: Ext.create('Ext.data.Store', {
            model: 'TagModel',
            data: [{
                some_id: 0,
                some_value: 'value0'
            }, {
                some_id: 1,
                some_value: 'value1'
            }]
        }),
        // value: ['0']
    }]
});

Ext.application({
    name: 'Fiddle',

    launch: function() {
        Ext.create('MyPanel');
    }
});

效果很好,但是如果你取消注释第 40 行,它应该告诉组件通过它们的 valueField 配置选择项目,它会在控制台中显示错误:

未捕获的类型错误:无法读取未定义的 ext-all-debug.js:144157 的属性“isModel”

根据specification,可以将value设置为与该字段配置的valueField关联的字符串数组。

【问题讨论】:

    标签: forms field extjs5


    【解决方案1】:

    由 OP Панов Владимир 发布:


    好的,我找到了解决方案:

    问题出在 ExtJS 的源代码中。如果有人有同样的问题,你可以使用这个覆盖:

    Ext.override(Ext.form.field.Tag, {
        findRecord: function(field, value) {
            var store = this.store,
                matches;
    
            if (store) {
                matches = store.queryBy(function(rec) {
                    return rec.get(field) === value;
                });
            }
    
            return matches ? matches.getAt(0) : false;
        },
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多