【问题标题】:ExtJs5: How to read server response in Model.saveExtJs5:如何在 Model.save 中读取服务器响应
【发布时间】:2015-02-21 22:31:25
【问题描述】:

我使用Model.save 来保存 ExtJs 表单中的数据。有时服务器会以以下格式返回操作状态:

{“成功”:假,“错误”:{“名称”:“无效名称”}}

以下代码将数据从表单发送到服务器:

变种模型 = formPanel.getRecord(); 模型.保存({ 回调:函数(记录,操作,成功){ // operation.response 为空, // 并且成功 === true // 这里如何读取服务器响应? } })

服务器响应被视为成功,因为 HTTP 状态为 200。所以我必须读取服务器响应以检查操作状态。但是operation.responsecallback 函数中是null

这是我的模型:

Ext.define('My.Model', { 扩展:'Ext.data.Model', idProperty: 'id', 字段:[ {名称:'id',类型:'auto'}, {名称:'名称',类型:'汽车'} ], 代理: { 类型:“休息”, 网址:'api/v1/models', 附加ID:真, 读者:{ 类型:'json', }, 作者:{ 类型:'json' } } });

问题:Model.save 调用后如何访问服务器响应?

更一般的问题:使用Model.loadModel.save 填充/保存ExtJs 表单在语义上是否正确?

我正在使用 ExJs 5.0.1.1255。

【问题讨论】:

    标签: extjs5


    【解决方案1】:

    我为此创建了一些简单的测试代码:

    var Clazz = Ext.define('MyModel', {
        extend: 'Ext.data.Model',
        proxy: {
            type: 'rest',
            url: 'api/v1/models'
        }
    });
    
    var instance = Ext.create('MyModel', {
        name: 'MyName'
    });
    
    instance.save({
        callback: function(record, operation) {
    
        }
    });
    

    服务器响应:

    {
        success: true,
        something: 'else'
    }
    

    你可以在这里看到这个:https://fiddle.sencha.com/#fiddle/fhi

    使用此代码,回调有一个record 参数,record.data 包含与服务器响应合并的原始记录。此外,您可以通过operation.getResponse()(而不仅仅是operation.response)获得对服务器响应的完全访问权限。

    关于您关于加载与保存的问题,如果您使用视图模型并以这种方式绑定模型,它就会变得毫无意义,因为您的表单应该始终反映模型的状态。

    【讨论】:

    • 哦,他们是否在 ExtJS 中引入了服务器端视图模型;p ?
    • operation.getResponse() 确实有效,谢谢!不幸的是,此方法在 ExtJs 文档中被标记为私有。
    • 如果我的方法没有实际意义,你会建议什么?
    • 好吧,既然您没有使用视图模型,那么 IMO 就可以了。这只是对做事方式的另一种想法:)
    【解决方案2】:

    使用model.save()Model.load() 绝对是正确的做法。

    除了提供自定义回调之外,您还应该研究配置custom proxy。在自定义代理中,您可以提供自己的 extractResponseData 方法实现。这可以让您集中检查服务器响应的需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 2012-04-03
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 2012-03-30
      相关资源
      最近更新 更多