【问题标题】:Proper way to update a model instance with rest proxy in Sencha Touch 2在 Sencha Touch 2 中使用 rest 代理更新模型实例的正确方法
【发布时间】:2016-06-21 22:15:10
【问题描述】:

我找不到使用 REST 代理更新现有模型实例的正确方法,Sencha Touch 总是向 REST 后端发送 PUT 而不是 POST。

我遵循了这些步骤:

从头开始生成一个新的项目。然后,使用 sencha 命令添加一个新模型:

sencha generate model Test id,feld1

在 Test.js 模型中设置 idProperty 和 rest 代理:

idProperty: 'id',
proxy :{
            type: 'rest',
            url: 'http://localhost:3000/products'
}

将此模型添加到 app.js

models: [
        'Test'
]

那么,在app.js的launch函数里面:

launch: function() {
        var test = Ext.create('test.model.Test');
        test.set('id', '1');
        test.set('feld1', 'some text');
        test.save({
            success: function(){
                console.log('Ok');
            },
            failure: function(){
                console.log('Ko');
            }
        }):
    }

这会导致向后端服务器发出 POST 请求,而不是 PUT,正如在更新和现有模型实例时所预期的那样。我在这里假设 Sencha 知道它是一个现有实例,因为 idPropertyField (id) 不为 null 或为空。

Request URL:http://localhost:3000/products?_dc=1466427599915
Request Method:POST
Request Payload: {id: "1", feld1: "some text"}

在 Sencha Touch 中使用 REST 代理更新现有模型实例的正确方法是什么?如何让它触发 PUT 请求而不是 POST?

【问题讨论】:

    标签: javascript extjs sencha-touch sencha-touch-2 sencha-architect


    【解决方案1】:

    如果您在保存前将记录的phantom 属性设置为false,它将被拾取为更新记录而不是新记录。

    以这个小提琴为例:https://fiddle.sencha.com/#fiddle/1cd1

    如果您查看Ext.data.Modelsave 方法(http://docs.sencha.com/extjs/6.0.1-classic/src/Model.js-1.html#Ext.data.Model-method-save),您可以看到这是如何确定的。基本上它归结为这一行:

    action = dropped ? 'destroy' : (phantom ? 'create' : 'update'), 
    

    Ext.data.ProxyStore 类中有一个类似的过滤方法,用于处理存储同步 - http://docs.sencha.com/extjs/6.0.1-classic/Ext.data.ProxyStore.html#method-filterNew

    【讨论】:

    • 感谢您的回复。奇怪的是,我之前尝试过没有成功,可能是缓存的脚本。有没有办法让幻像属性在 idProperty 为 null 或为空时自动返回 false,而不必一直手动设置?
    • 您可以覆盖模型类的 set 方法并检查与 idProperty 匹配的字段,然后将 phantom 更新为 false。
    • 太棒了。感谢您的时间和帮助。
    • 没问题。如果您确实覆盖了 set 方法,就会想到一些事情 - 请注意它可以接受对象以及字段和值!
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多