我找不到使用rest代理更新现有模型实例的正确方法,Sencha Touch总是向REST后端发送PUT而不是POST。
我遵循了这些步骤:
从头开始生成新的proyecto。然后,使用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: 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');
}
}):
}
这会在更新和现有模型实例时导致对后端服务器而不是PUT的POST请求。我假设Sencha知道它是一个现有的实例,因为idPropertyField(id)不为null或为空。
Request URL:http://localhost:3000/products?_dc=1466427599915
Request Method:POST
Request Payload: {id: "1", feld1: "some text"}
使用REST代理更新Sencha Touch中的现有模型实例的正确方法是什么?如何使它发出PUT请求而不是POST?
答案 0 :(得分:1)
如果您在保存之前将记录的phantom
属性设置为false
,则会将其作为更新记录而不是新记录提取。
以这个小提琴为例:https://fiddle.sencha.com/#fiddle/1cd1
如果您查看Ext.data.Model
save
方法(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