2013-06-07 3 views
2

저는 자체 프록시 (Ext.data.proxy.Proxy를 확장)를 개발하려고합니다. 내 서버 (json)에서 응답을 얻은 후이를 디코드하고 Json 독자를 사용하여 저장소에 커밋 할 레코드 집합을 만듭니다. 내가 이해하는대로 Operation 객체를 만들고 operation.commitRecords()으로 데이터를 커밋해야합니다. 하지만이 줄 if (clientRecords && clientRecords.length)은 결코 전달되지 않습니다. clientRecords는 정의되지 않았습니다. 이 객체를 초기화하는 방법도 사용하지 않는 방법을 이해할 수 없습니다. 이것은 현재 코드입니다 :extjs가 서버에서 응답을받습니다.

options.action = options.action || 'read'; 
    var operation = new Ext.data.Operation(options); 
    var json = reader.read(response); 
    operation.commitRecords(json.records); 

레코드를 커밋하려면 어떻게해야합니까? 미리 감사드립니다.

+0

이것은 흥미 롭습니다. 답을 모르지만 컨텍스트를 제공 할 수 있습니까? 왜 새로운 프록시가 필요한가요? Server.js를 오버라이드하지 않는 이유는 무엇입니까? 또한 프록시에서 더 많은 코드가 좋을 것입니다. 아니, 내가 도울 수 있다고 확신하지만, 그냥 관심이 .. –

+0

나는 websockets에 대한 몇 가지 구현을하려고 해요. 레코드 집합과 저장소 만 있으면 알고 저장소를 업데이트하려면 어떻게해야합니까? – Lalao

+0

일반적으로 레코드 집합과 저장소가 있지만 초기 질문에 대답하지 않는 경우 loadData를 사용할 수 있습니다. –

답변

0

좋아요 ... 가게는 프록시 콜백 함수 onProxyLoad(operation);과 방법을 읽어 호출 한 후 작업을 초기화하는 방법을 검색 가졌어요. 따라서 store.onProxyLoad(operation);을 추가하면 상점이 올바르게 채워집니다. 대답들 주셔서 감사합니다 ... 그들은 내 문제를 해결하는 데 도움을주었습니다.

0

이것은 작업을 생성하기로되어있는 프록시가 아니라 저장소입니다. 그런 다음이 작업을 콜백과 함께 프록시에 전달합니다. 프록시는 자체 방식으로 작업을 실행하고 완료되면 콜백을 사용하여 저장소에 알립니다.

질문에 대한 간단한 대답은 구현중인 CRUD 메서드에 전달 된 콜백을 실행해야한다는 것입니다. read (코드에 대한 일부 컨텍스트가 도움이 될 수 있음)이라는 가정하에 그러면 다음과 같이됩니다.

// see, the operation is given to us 
read: function(operation, callback, scope) { 
    var me = this; 
    doWebsocketMagic(function() { 
     // notify the store 
     Ext.callback(callback, scope || me, [operation]); 
    }); 
} 

프록시가 작업을 조작해야하기 때문에 충분하지 않습니다. 방법을 알기 위해서는 다른 프록시에서 코드를 읽어야합니다. ServerProxy이 작업을 저장했지만 HTTP 요청 ("ServerProxy should ideally be named HttpProxy")으로 작업하지 않을 것입니다. 불운.

따라서 the read method of MemoryProxy 코드를 읽어야합니다. 그것은 하나의 장소에서, 당신이해야만하는 모든 것의 예를 제공합니다 (나는 생각합니다).

그런 다음, 어쩌면 당신은 그것에 대해 영리 갈 수

Ext.define('My.WebsocketProxy', { 
    extend: 'Ext.data.proxy.Memory' 

    ,read: function(operation, callback, scope) { 
     var me = this; 
     doWebsocketMagic(function(response) { 
      me.data = response; 
      Ext.data.proxy.Memory.prototype.read.call(me, operation, callback, scope); 
     }); 
    } 
}); 
+0

답변 주셔서 감사합니다 ..! 따라서 Operation 개체는 저장소에서 인스턴스화 된 다음 저장소에 데이터를 커밋 할 때까지 전체 프로세스를 통과합니다. 그렇다면 요청하지 않고 일부 데이터를 업데이트하라는 서버 호출이 발생합니다 (웹 소켓을 사용하는 이유입니다). 이 절차는 일부 데이터, 관련 상점 및 수행 할 작업이있는 것으로 시작됩니다. 문제는 상점에 어떻게 적용 할 수 있는가하는 것입니다 (Operation 객체를 시작하는 방법). 다시 한 번 감사드립니다! – Lalao

관련 문제