0

コンボボックスで編集フォームをポップアップするグリッドがあります。ビューを表示する前に、コンボボックス ストアを読み込みます。次に、 を使用してフォームの値を設定しますform.loadRecord(record);。これにより、プライマリ レコードが読み込まれます。しかし、コンボボックスに関連付けられている関連データ値をロードして、コンボボックスの値が正しく設定されるようにするにはどうすればよいですか。

  1. setValue を手動で使用できることはわかっていますが、ロード フォームを介して処理できると考えていたと思います。

  2. フォームに 3 つのフィールドがある場合、firstName lastName と言ってから、ContactType のコンボボックスを指定します。firstName と lastName はプライマリ レコードにあり、ContactType は関連付けられたレコードです。フィールド lastName または firstName の値を変更すると、変更が検出され、レコードがダーティとしてマークされます。コンボボックスの値を変更すると、レコードはダーティとしてマークされません。機種が違うので推測です。1枚のレコードにする方法。グリッド内のレコードから値が設定されたフォームにコンボボックスを持つことは一般的だと思いますが、これを達成するための最良の方法の例は見つかりません。

ここにいくつかのコードがあります。

私のjsonは次のようになります。プライマリ レコードには、firstName、lastName があります。1 つの関連付けられたレコードは ContactType です。

{
   "__ENTITIES":[
      {
         "__KEY":"289",
         "__STAMP":12,
         "ID":289,
         "firstName":"a",
         "middleName":"",
         "lastName":"asd",
         "ContactType":{
            "__KEY":"2",
            "__STAMP":4,
            "ID":2,
            "name":"Home"
         }
      }
   ]
}

コントローラーリスト機能、編集機能、更新機能、グリッド行クリックで発火

list: function () {
       var mystore = this.getStore('Contacts')
       mystore.proxy.extraParams = { $expand: 'ContactType'};
       mystore.load({
        params: {
        },
        callback: function(r,options,success) {
     //       debugger;
        } //callback
    }); //store.load

        editContact: function (grid, record) {     
        //load store for combobox
        var store = this.getStore('ContactTypes');
        store.load({
            params: {
            },
            callback: function(r,options,success) {
        //    debugger;
            } //callback
        }); //store.load

        var view = Ext.widget('contactsedit');
        var form =  view.down('form')
        //load primary record
        form.loadRecord(record);
        //load associated record
        form.loadRecord(record.getContactType());

 updateContact: function (button) {
    var win = button.up('window'),
        form = win.down('form'),
        record = form.getRecord(),
        values = form.getValues(),
        store =  this.getStore('Contacts')
    if (form.getForm().isValid()) {
        if (this.addnew == true) {
            store.add(values);
        } else {
            record.set(values);
        }
        store.sync();
        win.close();
    }
}

loadRecord(record.getContactType)、関連付けられたデータへのゲッターです。関連データを取得することはできますが、コンボボックスに値を設定する方法や、データを 1 つのレコードとして機能させて変更を自動的に検出する方法がわかりません。

私の連絡先モデル

Ext.define('SimplyFundraising.model.Contact', {
    extend : 'Wakanda.model',
    requires:[
        'SimplyFundraising.model.ContactType'
    ],
    fields: ['firstName', 'middleName','lastName','ContactType.name'],
    associations: [
        {
            type: 'hasOne',
            model: 'SimplyFundraising.model.ContactType',
            name: 'ContactTypes',
            getterName: 'getContactType',
            associationKey: 'ContactType'

        }
    ]
});

ContactType モデル

Ext.define('SimplyFundraising.model.ContactType', {
    extend : 'Wakanda.model',
    fields: ['__KEY','name',]
});
  1. これは、ネストされたデータを含むフォームでコンボボックスの値を設定する適切な方法ですか?

  2. アソシエーションを使用せず、すべてのフィールドを連絡先モデルに配置する必要があります。つまり、すべての ContactType フィールドを連絡先モデルに追加すると、データは同じレコードに存在し、変更追跡が機能します。しかし、これは MVC パターンに反し、関連付けの理由に反しているようです。

皆さんはこのシナリオをどのように処理しますか。どんな例でも素晴らしいでしょう!

ありがとう、ダン

4

1 に答える 1