Extjs5在ajax请求中建模默认值

时间:2014-11-25 01:24:05

标签: extjs5

我有问题。我创建了一个简单的模型,并尝试通过ajax请求使用它来保存新值。但是必须为空的参数会发送默认值。你可以通过下面的链接看到它。代码没有专门设置正确的方式因为控制台(f12)可以看到堕落的挑战。在其中我通过查询字符串传递值,以及通过有效负载请求(尚未发明如何摆脱它,因为我理解它 - 默认使用有效负载)。通常,而不是空的carId调用转移Car-1。

https://fiddle.sencha.com/#fiddle/dsj

如何修复此行为并执行此操作,如果我们没有任何意义,它会传递为空?

3 个答案:

答案 0 :(得分:1)

您可以创建扩展Ext.data.proxy.Ajax的自定义代理类,然后覆盖buildRequest方法以检查所有create操作并将所需值分配给idProperty

Ext.define('CarProxy', {
    extend: 'Ext.data.proxy.Ajax',

    alias: 'proxy.carproxy',
    type: 'ajax',
    idParam: 'carId',
    reader: {
        type: 'json',
        rootProperty: 'data'
    },
    api: {
        create: './createcar.json'
    },
    writer: {
        type: 'form'
    },

    buildRequest: function(operation) {
        var request = this.callParent(arguments);
        if (request.getAction() === 'create') {
            request.getRecords().forEach(function(record) {
                record.set('carId', ''); //assing desired value to id
            });
        }

        return request;
    }
});

答案 1 :(得分:0)

这是默认的ExtJS行为。如果未指定id,则会生成该ID。为了避免这种情况,你可以为你的模型添加构造函数:

Ext.define("Car", {
    [...],

    constructor: function() {
        this.callParent(arguments);
        // check if it is new record
        if (this.phantom) {
            // delete generated id
            delete this.data[this.idProperty];
        }
    }
});

答案 2 :(得分:0)

谢谢所有回答的人。我想展示我的解决方案:

添加到模型定义参数 标识符:'自定义' 。 然后创建适当的标识符,它将在generate方法上返回undefined:

Ext.define('Custom', {
    extend: 'Ext.data.identifier.Generator',
    alias: 'data.identifier.custom',

    generate: function() {
        return;
    }
});