0

複数のストアで再利用したいカスタム ComboBox コンポーネントを定義しました。以下のようなシンプルな構成になっています。

Ext.define('Myapp.CustomCombo', {
extend: 'Ext.form.ComboBox',
valueField: 'id',
displayField: 'name'
});

モデルは

Ext.define('Myapp.model.ComboModel',{
extend: 'Ext.data.Model',
fields: [
    { name: 'id', type: 'int' },
    { name: 'name', type: 'string' },
    { name: 'linkCls', type: 'string' }
]
});

以下のように、複数のストアをそれぞれ独自のプロキシ構成で定義し、一意の storeId で識別します。

Ext.create('Myapp.store.EmployeeComboStore', {
model: 'Myapp.model.ComboModel',
storeId: 'employeeLOVComboStore',
proxy: {
    type: 'rest',
    url: '/employees/getLovData',
    reader: {
        type: 'json',
        rootProperty: 'data'
    }
}
});

サーバーは以下のように json で応答します

{
"data" : [
    {"employeeId": 1, "employeeName": "Chris"},
    {"employeeId": 2, "employeeName": "Jack"},
]
}    

異なるプロキシ URL を持つ departmentStore のように、そのようなストアを複数持つことができ、サーバーの応答はどこにある可能性がありますか?

{
"data" : [
    {"departmentId": 1, "departmentName": "Sales"},
    {"departmentId": 2, "departmentName": "Marketing"},
]
}

リーダーでマッピングを定義したいのですが、次のように、異なるストアでデータを異なる方法でマッピングする手順を使用します。 & departmentStore の「name」への departmentName。

モデルの各フィールドのマッピングを定義するオプションがあることを見てきましたが、サーバーはフィールド名が列名になるリレーショナル データベースからのデータで応答するため、リーダーでマッピングを定義したいと思います。

4

1 に答える 1

1

できることはmetaData、サーバーからクライアントに送信することです。

json 応答は次のようになります。

{
  data: [{ ... }],
  msg: "...",
  total: 99,
  metaData: {
    fields: [{ ... }],
    columns: [{ ... }],
    idProperty: "id",
    messageProperty: "msg",
    root: "data"
  }
}

あなたの場合、json応答が次のようになっていれば十分です

{
  data: [{ ... }],
  metaData: {
    fields: [
        { name: 'Id', type: 'int', mapping: 'departmentId' },
        { name: 'Name', type: 'string', mapping: 'departmentName' },
    ]
  }
}

これがどのように機能するかの良い例もここにあります: Basic Meta Data Config

于 2014-10-24T08:06:42.940 に答える