[Php] 비동기 데이터로 Dojo Dijit FilteringSelect의 상점 갱신


Answers

RiverC 게시물을 기반으로 내 콤보를 업데이트하는 방법은 다음과 같이 잘 작동합니다.

, updateData : function(data) {
    var storeData = {data: data, id:'attrFilterStore'};
    var newStore = new dojo.data.ItemFileWriteStore({data: data});
    this.element.store = newStore;
    this.element.startup();
}

여기서 " this.element "는 FilteringSelect 개체에 대한 참조입니다.
" updateData "메소드는 RiverC 게시 구조로 JSON을 수신하는 ajax 요청의 콜백 함수입니다.

Question

인트라넷 환경에서 Zend + Dojo 양식을 사용하고 있습니다. 양식에서 선택된 상태가 변경되면 카운티 목록을 업데이트해야합니다. HTML을 사용하면 json 응답을 구문 분석하고 (또는 html 단편을 제공) select의 innerhtml을 업데이트합니다. 그러나 Dojo에서 그렇게하는 것은 매우 복잡합니다.

즉, 양식 필드에 onBlur 업데이트를 설정할 수있는 일반 메서드를 정의했습니다. 이 함수는 인수를 사용하여 데이터베이스를 호출하고 싱글 톤 응답 (우리가 이미 처리 한) 또는 목록 응답을 가져 오는 Controller 동작에 연결됩니다. 목록을 다시 얻는다면, 그 목록을 가지고있는 select에서 옵션을 변경해야합니다.

이 모든 것은 지금까지 잘 작동합니다. response.data에 좋은 목록이있는 유효한 json 응답을 얻습니다. 여기에 문제가 있습니다. 어떻게하면 기존 저장소를 간단히 업데이트 할 수 있습니까 (검사 결과 _comboBoxDataStore임이 드러납니다)? 자동 생성되므로 다른 종류의 상점에서 셀렉트를 선언 할 수 없습니다.

상점을 무차별 적으로 움직일 수있는 방법이 있습니까? 주된 열쇠는 내가하는 일은 Internet Explorer에서 작동해야한다는 것입니다. 파이어 폭스를 사용하면 내가 작업하고있는 객체에 대한 더 나은 통찰력을 얻을 수있다.

추가 질문으로 _comboBoxDataStore를 업데이트 할 수없는 이유를 아는 사람이 있습니까? 다른 프레임 워크는 예를 들어 extJS와 같이 상점을 매끄럽게 업데이트 할 수 있습니다. 콤보 상자에 제한 사항을 설계하는 데있어 추후에 추측 할 수 없으므로 원본 HTML에서 한 단계 씩 업데이트 할 수는 없습니까? 아니면 난해한 물건 목록을 저글링하지 않는 명백한 해결책을 놓치고 있습니까?




옵션을 사용할 수도 있습니다 ..

var fldSelect = dijit.byId("fieldSelect");
fldSelect.options = fldoptions;
fldSelect.startup();

여기서 fldoptionsfldoptions 하는 새 데이터입니다. 주의 사항 : fldSelect.startup() 호출하지 마십시오. 그렇지 않으면 데이터가 업데이트되지 않습니다.




이렇게 일어난 것처럼,이 튜토리얼은 실제로 가능하지 않지만 실제로 본 것이 얼마나 쉬운지를 보여줍니다.

이것이 어딘가에 있는지 확인하십시오.

dojo.require("dojo.data.ItemFileWriteStore");

그런 다음 filteringSelect가 어떻게 이루어 졌는지에 관계없이 다음을 수행 할 수 있습니다.

newStore = new dojo.data.ItemFileWriteStore({
    data:{
         identifier: 'id',
         label: 'name',
         items: response.data
    }
});

filteringSelect.store = newStore;
filteringSelect.startup();



_comboBoxDataStore 생성을 제어 할 수있는 경우 해당 저장소에서 clearOnClose를 true로 설정할 수 있습니다. 그런 다음 해당 저장소를 닫고 새 데이터에 url 또는 data 속성을 설정할 수 있습니다 (clearOnClose가 dojo 1.4 이상에서만 지원되는 데이터 속성을 사용한다는 점에 유의하십시오). 이렇게하면 select / combobx 위젯이 새 데이터로 자동 업데이트됩니다.

예를 보려면 http://soularis999.blogspot.com/2011/03/reloading-dojodataitemfilereadstore.html을 참조하십시오.

clearOnClose를 설정할 수 없다면 (Zend 프레임 워크가 해당 동작을 수정하는 옵션없이 소유하고 있기 때문에), 새로운 데이터 스토어를 만들고 콤보 박스의 데이터 스토어를 새로 생성 된 데이터 스토어로 설정할 수 있습니다. dijit filteringselect 및 combobox는 수정할 수있는 저장소 특성을 제공합니다.

완전히 다른 접근 방식으로, 이러한 용도로 도우 죠 필터링 위젯의 "쿼리"속성을 사용하여 탐색 할 수 있습니다. 이러한 기능은 매우 유용하며 수행해야 할 코드 및 관리의 양을 줄입니다.

필터링 선택 http://livedocs.dojotoolkit.org/dijit/form/FilteringSelect 의 검색어 필터를 수정하여 국가 선택에 따라 국가가 어떻게 변경되는지 예를 보려면 아래 URL을 참조 하십시오.

또한, 귀하의 유스 케이스 설명에서, 그것은 dijit filteringSelect가 combobox보다 위젯의 더 나은 선택일지도 모릅니다 (카운티 목록이므로 사용자가 목록에없는 카운티를 입력 할 수 있기를 원하십니까?)?