2011-08-17 4 views
2

팀,로드 이벤트가 jsonstore에서 실행되지 않음

내 목록을로드하는 데 jsonstore가 있습니다. 프록시 설정없이 인라인 데이터를 사용하여 저장소를로드 중입니다. 내 가게의로드 이벤트를 호출하고 싶었습니다. 친절하게 어떻게하는지 알려주세요.

와, 'SettingModel',

getGroupString:function(){ 
     return 'Set Duration'; 
     }, 
autoLoad:false,  
data: [ 
    {name: '5 mins', value: '5'}, 
    {name: '15 mins', value: '15'}, 
    {name: '25 mins', value: '25'}, 
    {name: '45 mins', value: '45'} 
], 
listeners : { 
    'load': function(){ 
     Ext.Msg.alert('App',"load"); 
    } 
}}); 

Store.load() :

스토어 = 새로운 Ext.data.JsonStore ({ 모델 : 아래

내 상점 코드 위의 코드에서 위와 같은 오류 메시지가 나타납니다. "잡히지 않은 오류 : ServerProxy를 사용하고 있지만 URL을 제공하지 않았습니다." "Store.load();"lin을 제거하면

전자, 메신저 오류가 발생하지 않고 목록에 데이터가 채워집니다. 그러나로드 이벤트는 시작되지 않습니다.

이 시나리오에서로드 이벤트를 발생시키는 방법을 도와주세요.

감사의 말

답변

2

로드 이벤트가 호출되지

listeners : { 
    load : { 
      fn : function(){ 
        Ext.Msg.alert('App',"load"); 
      }, 
      scope : this 
     }, 
    exception : { 
      fn : function(err){ 
        Ext.Msg.alert('App',"Oh Crap!"+err); 
      }, 
      scope : this 
     } 
} 

당신은 기능과 자주 문제 범위를 제어 할 수 있습니다 이런 식으로, 데이터가 인라인 인 경우. 또한 로드 메서드은 AJAX 요청을 사용하여 데이터에 액세스해야하는 경우에만 호출해야합니다. 그 이유는 .load() 메서드를 호출 할 때 프록시 URL이 필요한 이유입니다.

당신이 loadData를 호출 할 때마다 듣고 싶은 경우 대신 객체 생성자와 datachanged 이벤트에서 그것을 전달하는, 인라인 데이터를로드 할 loadData 방법를 사용해보십시오.

1

먼저 저장소가 사용되고 있는지 확인해야합니다. autoLoad : false가 있으므로 자체로드되지 않습니다. 바인딩 할 구성 요소가로드되어야합니다. 그렇지 않으면 load 메서드를 호출해야합니다. 또한 예외 상태를 확인해야합니다.

은 일반적으로 다음과 같은 형식으로 가고 싶어 :

2

Ext는 모델 등에서 사용할 상점을 밀어 넣는 것처럼 보입니다. 상점을 사용하고 있기 때문에 데이터를 얻기 위해 ajax 호출을해야합니다. 당신은 프록시를 지정하여이를 덮어 쓸 수 있습니다 : 이성애자 저장소에 대한 내선 워드 프로세서에서

 proxy: { 
      type: 'memory', 
      reader: { 
       type: 'json', 
       root: 'items' 
      } 
     }, 

을 : http://dev.sencha.com/deploy/touch/docs/

Ext.regModel('User', { 
fields: [ 
    {name: 'firstName', type: 'string'}, 
    {name: 'lastName', type: 'string'}, 
    {name: 'age',  type: 'int'}, 
    {name: 'eyeColor', type: 'string'} 
] 
}); 

오 보면, 그들은 자신의 로컬 저장소에 메모리 프록시가 없습니다!

재미있는 보너스로 JsonStore는 터치 문서에도 포함되어 있지 않습니다.

http://jsfiddle.net/6WV3m/3/은 extjs 4.0 코드이지만 내 터치에서는 로컬로 작동합니다.

1

pablodcar의 대답이 정말 도움이됩니다. 빈 데이터 배열로 저장소를 인스턴스화 한 다음로드 할 데이터 배열로 loadData() 메서드를 호출 할 수 있습니다. 이 메소드는 storeId으로 상점을 시작한 후 Ext.data.StoreManager.lookup(storeId)을 사용하여 찾아보기하면 어디서나 호출 할 수 있습니다.

상점 데이터가 변경 될 때마다 알림을 받으려면 datachanged 이벤트를 청취 할 수 있습니다.

관련 문제