2012-03-29 3 views
1

저는 Struts 2를 사용 중이며 편집 가능한 서버 측 페이징 및 정렬 그리드를 포함하고자합니다.쓰기 API 및 서버 측 페이징 및 정렬을 포함하도록 QueryReadStore 또는 ItemFileWriteStore를 서브 클래 싱합니다.

쓰기 및 알림 API를 구현하기 위해 QueryReadStore를 서브 클래스 화해야합니다. 그래서 JsonRest 저장소를 사용하지 않으려 고 서버 쪽 REST 서비스를 inlcude 싶지 않아요. 이것이 어떻게 할 수 있는지 어떤 생각.? 어떤 메소드를 재정의해야하고 정확히 어떻게해야합니까? 나는 많은 예를 들었지만 이것이 정확히 어떻게 행해지는지 알지 못한다.

또한 ItemFileWriteStore를 확장하고 서버 측 페이지 매김을 포함하도록 메서드를 재정의 할 수 있습니까? 그렇다면 어느 메소드를 재정의해야합니까? 이것이 어떻게 수행 될 수 있는지에 대한 예를 얻을 수 있습니까?

답변

1

대답은 예입니다. 하지만 ItemFileWriteStore를 서브 클래스 화해야합니까, 필요에 맞지 않습니까? .save()에 대한 간단한 설명이 이어집니다.

Clientside는 저장소에서/new/delete를 수정하지만 더러운 것으로 표시됩니다. 더러운 항목을 가지고 있지만, 가게는 사람들에게 참조를 유지하는 것이 있으므로 같은 :하지만,이 경우 발생하지 않습니다 서버로 요청을 보내는 이들 각각을 반복한다 (저장 호출에

store._pending = { _deletedItems: [], _modifiedItems: [], _newItems: [] }; 

), 어느 쪽도 없습니다 _saveEverything 또는 _saveCustom이 정의됩니다. WriteStore는 단순히 클라이언트 측 복귀 기능을 재설정하고 클라이언트 메모리에 저장합니다. See source 검색 "저장 :"기능을 : 당신이있을 것이라는 점을 감안, 짧은에서 OoCmS._storeAPI

이 보일러를 따라 여기

간단한 writeAPI 내 구현은, 그것의 붙박이 검증없이 사용하도록 수정해야 서버의 CRUD 패턴 :

new ItemFileWriteStore({ 
    url: 'path/to/c**R**ud', 
    _saveCustom: function() { 
     for(var i in this._pending._newItems) if(this._pending._deletedItems.hasOwnProperty(i)) { 
      item = this._getItemByIdentity(i); 
      dxhr.post({ url: 'path/to/**C**rud', contents: { id:i }}); 
     } 

     for(i in this._pending._modifiedItems) if(this._pending._deletedItems.hasOwnProperty(i)) { 
      item = this._getItemByIdentity(i); 
      dxhr.post({ url: 'path/to/cr**U**d', contents: { id:i }}); 
     } 

     for(i in this._pending._deletedItems) if(this._pending._deletedItems.hasOwnProperty(i)) { 
      item = this._getItemByIdentity(i); 
      dxhr.post({ url: 'path/to/cru**D**', contents: { id:i }}); 
    } 
}); 

Now; 페이징에 관해서는, ItemFileWriteStore는 수퍼 클래스 mixins에서 페이지 매김을가집니다. 단지 두 가지 셋업으로 호출해야합니다. 하나는 스토어에서 직접적으로 서버가 서브셋 만 반환해야합니다. - 또는 서버가 쿼리를 반환하는 쿼리 케이 퍼빌리티가있는 모델에서 호출합니다. 풀세트.

var pageSize = 5, // lets say 5 items pr request 
    currentPage = 2; // note, starting on second page (with *one* being offset) 
store.fetch({ 
    onComplete: function(itemsReceived) { }, 
    query: { foo: 'bar*' },    // optional filtering, server gets json urlencoded 
    count: pageSize,      // server gets &count=pageSize 
    start: currentPage*pageSize-pageSize // server gets &start=offsetCalculation 
}); 

감옥의 erat는 것들의 대부분을 지 웁니다

+0

감사합니다, demonstrandum. :) – pratik