在 Sencha Touch 2 中使用 rest 代理更新模型实例的正确方法
Proper way to update a model instance with rest proxy in Sencha Touch 2
我找不到使用 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函数里面:
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"}
使用 REST 代理更新 Sencha Touch 中现有模型实例的正确方法是什么?如何让它触发 PUT 请求而不是 POST?
如果您在保存前将记录的 phantom
属性 设置为 false
,它将被拾取为更新记录而不是新记录。
以这个 fiddle 为例: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
class 中有一个类似的过滤方法来处理商店同步 - http://docs.sencha.com/extjs/6.0.1-classic/Ext.data.ProxyStore.html#method-filterNew
我找不到使用 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函数里面:
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"}
使用 REST 代理更新 Sencha Touch 中现有模型实例的正确方法是什么?如何让它触发 PUT 请求而不是 POST?
如果您在保存前将记录的 phantom
属性 设置为 false
,它将被拾取为更新记录而不是新记录。
以这个 fiddle 为例: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
class 中有一个类似的过滤方法来处理商店同步 - http://docs.sencha.com/extjs/6.0.1-classic/Ext.data.ProxyStore.html#method-filterNew