Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从嵌套数据的网格中设置窗体上的combox值?Extjs 4.2 Mvc_Extjs_Extjs Mvc_Extjs4.2 - Fatal编程技术网

如何从嵌套数据的网格中设置窗体上的combox值?Extjs 4.2 Mvc

如何从嵌套数据的网格中设置窗体上的combox值?Extjs 4.2 Mvc,extjs,extjs-mvc,extjs4.2,Extjs,Extjs Mvc,Extjs4.2,我有一个网格,弹出一个带有组合框的编辑表单。在显示视图之前,我加载组合框存储。然后我使用form.loadRecord(record)设置表单的值。这将加载主记录ok。但是如何加载绑定到combobox的关联数据值,以便正确设置combobox的值呢 我知道我可以手动使用setValue,但我想我认为可以通过加载表单来处理 如果我的表单有3个字段,让我们说firstName lastName,然后是ContactType的组合框。firstName和lastName位于我的主记录中,Contac

我有一个网格,弹出一个带有组合框的编辑表单。在显示视图之前,我加载组合框存储。然后我使用
form.loadRecord(record)设置表单的值。这将加载主记录ok。但是如何加载绑定到combobox的关联数据值,以便正确设置combobox的值呢

  • 我知道我可以手动使用setValue,但我想我认为可以通过加载表单来处理

  • 如果我的表单有3个字段,让我们说firstName lastName,然后是ContactType的组合框。firstName和lastName位于我的主记录中,ContactType是关联的记录。如果我更改字段lastName或firstName中的值,则会检测到更改,并将记录标记为dirty。如果我更改组合框值,则记录不会标记为脏记录。我猜是因为它们是两种不同的型号。如何让它成为一张唱片。我认为在表单上设置一个组合框是很常见的,它的值是从网格中的记录中设置的,但我找不到实现这一点的最佳方法的任何示例

  • 下面是一些代码

    我的json看起来像这样。主记录名为lastName lastName有一个关联记录为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)
    是关联数据的getter。我能够获取相关数据,但不确定如何使其在组合框中设置值,或者如何使其作为一个记录并自动检测更改

    我的联系人模型

    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'
    
            }
        ]
    });
    
    接触式模型

    Ext.define('SimplyFundraising.model.ContactType', {
        extend : 'Wakanda.model',
        fields: ['__KEY','name',]
    });
    
  • 这是在具有嵌套数据的表单中为组合框设置值的正确方法吗

  • 如果我不使用关联,而只是将所有字段放在我的联系人模型中,即将所有ContactType字段添加到联系人模型中,那么数据应该在相同的记录中,并且更改跟踪将起作用。但这似乎与MVC模式背道而驰,也与关联的原因背道而驰

  • 你们如何处理这个场景,任何例子都会很好

    谢谢,
    Dan

    如果表单正确加载了值,则只需执行以下操作:


    谢谢你的建议。我知道第一种形式。loadRecord(record);当窗体中的值显示时正在工作,但是我不知道第二个窗体是否为.loadRecord(record.getContactType());正在工作,你怎么说?根据我的理解,当我使用第二个form.load时,数据_键应该与组合框数据_键匹配并设置值。由于前两个字段是一个存储,而combobox是另一个存储,所以仍然存在更改跟踪问题。谢谢,我认为您不想调用loadRecord()两次。调用它一次,在它运行之后,设置组合初始值。我按照你的建议做了。这是可行的,但它非常手动,似乎是错误的。但好的,下一个主要关注点是变化跟踪。在表单加载并正确设置combobox值后,如果我更改combobox值并单击save,则不会发生任何事情,因为表单绑定到主存储,它不会认为任何字段都是脏表单。loadRecord(record);var mykey=record.getContactType().data.\uu KEY combo.setValue(mykey)我在sencha论坛上发现了这个线程,一些用户已经手动处理了相关数据,但现在似乎应该在框架中处理了。