将嵌套表单数据保存回ExtJS中的服务器

时间:2013-01-31 20:31:37

标签: javascript extjs model extjs4

我有一个包含与另一个模型的关联的模型。我可以使用字段上的mapping属性将嵌套数据显示到表单中。例如:

Ext.define('Example.model.Request', {
    extend: 'Ext.data.Model',

    fields: [
        {
            name: 'id',
            type: Ext.data.Types.NUMBER,
            useNull: false
        }
        {
            name: 'plan_surveyor',
            mapping: 'plan.surveyor',
            type: Ext.data.Types.STRING
        }
    ],

    associations: [
               {type: 'hasOne', associationKey: 'plan', getterName:'getPlan', model: 'Specs.model.Plan'}
              ],

    proxy: {
            type: 'direct',
            api: {
                read: requestController.load,
                 update: requestController.update,
            },
            reader: {
                type: 'json',
                root: 'records'
            },
            writer: {
                type: 'json',
                writeAllFields: true,
                nameProperty: 'mapping'
            }
        }

    });

使用此方法,我可以通过引用plan_surveyor在表单中显示plan.surveyor值。我调用Form.loadRecord(model)将模型中的数据拉入表单。

但是,现在我正在尝试将数据发送回服务器,我收到错误:

Error performing action. Please report the following: "Unrecognized field "plan.surveyor"

我试图通过首先调用Form.updateRecord(model),然后调用model.save()来保存到服务器。有没有办法让Writer明白'plan.surveyor'不是属性名称,而是正确处理嵌套?

我是以正确的方式开始的,或者我应该只是处理表单数据的设置并以更手动的方式加载回模型?似乎嵌套数据一般都不是很好支持 - 任何建议?

1 个答案:

答案 0 :(得分:0)

    Ext.define('Example.model.Request', {
        extend: 'Ext.data.Model',

        fields: [
            {
                name: 'id',
                type: Ext.data.Types.NUMBER,
                useNull: false
            }
            {
                name: 'plan_surveyor',
                mapping: 'plan.surveyor',//change to 'plan_surveyor'
                type: Ext.data.Types.STRING
            }
        ],

更改显示在评论中,因为数据索引是以上面的格式给出的,因为你给的格式是一个不是dataindex的时间它是一个列或extjs准备,所以请改变它可能它的工作正常

这不起作用你会发送漏洞代码