在 Extjs 中将信息传递给 Ext.data.Model

Passing information to Ext.data.Model in Extjs

我正在尝试编辑一个开源程序(同时学习 Extjs),但遇到了关于模型的问题。我不想在这里放代码,因为它太长了,但如果需要我可以提供。

所以我得到了一个 class 扩展 Ext.form.Panel 和分配给它的模型 "PartModel"。该模型有一个名为 "partNumber" 的字符串字段以及许多其他字段。

在这个面板中,我想从数据库预定义值的组合框中选择一个部件号,并将其分配给 "partNumber"。

问题是我想在组合框中分配 "displayed" 的值。(不是商店字段之一,我正在为其使用自定义 XTemplate)

我该怎么做?

编辑:添加组合框代码。我认为添加 "dataIndex: 'partNumber'" 就足以完成工作,但这段代码根本不起作用。我可以从组合框中看到零件编号字符串,但是当我选择一个并点击保存按钮时,它不会保存。 (还有许多其他字段与该保存按钮配合得很好,也许我只需要添加另一个按钮来保存零件号?)

{
  xtype: 'combobox',
  dataIndex: 'partNumber',
  fieldLabel: "Part Number",
  labelWidth: 150,
  flex: 1,
  store:{
    xtype: 'store',
    autoLoad: true,
    model: 'PartGroupsClasses',
    proxy: getPartGC()},
  queryMode: 'local',
  renderTo:Ext.getBody(),
  tpl:Ext.create('Ext.XTemplate','<tpl for="."><div class="x-boundlist-item">{code}-{descr}-{ccode}-{cdescr}</div></tpl>'),
  displayTpl:Ext.create('Ext.XTemplate','<tpl for=".">{code}{descr}{ccode}{cdescr}</tpl>')
}

Edit2:发现保存按钮基本上是在调用以下函数。

Ext.override(Ext.data.Model, {
    setDataWithAssociations: function(data) {
        for (var i in data) {
            if (this.fields.containsKey(i)) {
                this.set(i, data[i]);
            }
            if (this.associations.containsKey(i)) {
                var store = this[i]();
                store.add(data[i]);
            }
        }
    }
});

我认为您的问题不够清楚,无法得到明确的答案... 我不清楚你的 objective 但如果你想在商店里展示一些东西并且它背后有文件上的价值请看看这个例子是否有帮助

商店

this.data = Ext.create('Ext.data.JsonStore', {fields: ['id', 'data'], data: [{id: 1, data: 'data1'}, {id: 2, data: 'data2'}, {id: 3, data: 'data3'}, {id: 4, data: 'data4'}]});

组合

xtype:'Combobox',
name:'wtv',
displayField: 'data',
valueField: 'id'

它将显示带有数据的组合,但是如果您获得带有选择路径的组合并执行例如

选择器

refs: [{
ref:Combo
selector:'Panel Combobox[name=wtv]'
}]

稍后你可以做类似的事情 Panel.getCombo().getValue() 而且不会 返回显示的字段(数据),但它会给出 id。

抱歉格式错误!希望对你有帮助

我会做这样的事情......在你的组合框模型中,添加一个额外的字段,利用 convert 函数来创建你的 displayValue,然后在你的组合框中,只需将该值用于你的 displayValue 属性.

型号

Ext.define('MyComboModel', {
  extend: 'Ext.data.Model',
  fields: [
    {
      name: 'code',
      type: 'string'
    },
    {
      name: 'desc',
      type: 'string'
    },
    {
      name: 'ccode',
      type: 'string'
    },
    {
      name: 'cdesc',
      type: 'string'
    },
    {
      name: 'displayValue',
      type: 'string',
      convert: function(value, record) {
        return record.get('code') +
          record.get('desc') +
          record.get('ccode') +
          record.get('cdesc');
      }
    }
  ]
});

组合

    xtype: 'combobox',
    name: 'Field2',
    valueField: 'displayValue',
    displayField: 'displayValue',
    fieldLabel: 'Field2',
    queryMode: 'local',

Full example.