0

나머지 프록시를 사용하여 기존 모델 인스턴스를 업데이트하는 적절한 방법을 찾을 수 없습니다. Sencha Touch는 POST 대신 REST 백엔드 대신 PUT을 보냅니다.Sencha Touch 2에서 나머지 프록시로 모델 인스턴스를 업데이트하는 올바른 방법

처음부터 새로운 proyecto 생성 :

내가 그 단계를 따랐다. Test.js 모델 내부

sencha generate model Test id,feld1 

설정 idProperty 휴식 프록시 : 그런 다음, 엽차 명령을 사용하여 새 모델을 추가

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

그런 다음

models: [ 
     'Test' 
] 

을 app.js이 모델 추가 , 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이거나 비어 있지 않기 때문에 Sencha가 기존 인스턴스라는 것을 알고 있다고 가정합니다.

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

Sencha Touch에서 기존 모델 인스턴스를 REST 프록시를 사용하여 업데이트하는 올바른 방법은 무엇입니까? POST 대신 PUT 요청을 발생시키는 방법은 무엇입니까?

답변

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

+0

감사합니다. 이상하게도, 나는 성공하기 전에 그것을 시도 했었습니다. 아마도 캐시 된 스크립트 일 것입니다. id 속성이 null이거나 항상 수동으로 설정하지 않고 자동으로 비어있는 경우 팬텀 속성을 false로 만드는 방법이 있습니까? – Oscar

+1

모델 클래스의 set 메서드를 재정의하고 idProperty와 일치하는 필드를 확인한 다음 팬텀을 false로 업데이트 할 수 있습니다. – Stuart

+0

굉장합니다. 시간과 도움에 감사드립니다. – Oscar