2014-03-25 2 views
1

환경 : Windows의 Worklight Studio 6.1. JSONStore.init() 메소드 사용에 대한 이해를 확인하고자합니다. 이것은 this question에 이어지는 것으로, 저장소를 다시 열기 위해 init()을 호출 할 때 처음으로 저장소를 초기화 할 때와 동일한 매개 변수를 전달해야한다는 것을 설정합니다.Worklight JSONStore - 수명주기

이제 정확히 일 때 init()을 호출해야하고 실수로 init()을 여러 번 호출하여 문제가 발생할 수 있는지 여부. 이것은 명백해 보일지 모르지만 일부 오류 조건을 진단하려고 시도하고 있으며 가능한 원인 중 하나는 init()을 너무 자주 호출 할 수 있다는 것입니다.

내 생각에 JSONstore 컬렉션을 사용하는 응용 프로그램을 실행할 때 각 컬렉션에 대해 init()을 호출해야하며 (아마도 콜렉션 목록이있는 init()을 호출해야 함) 합리적인 모델은 다음과 같습니다. 응용 프로그램 시작시이를 수행하는 것입니다. 이것은 내 문서를 읽었을 때 JSONstore.init을 기반으로합니다.

우리가 확인할 수있는하시기 바랍니다 그 시점에서 우리가 할 수있는에 그 :

A). JSONStore.get()과 같은 메소드를 자유롭게 사용하고 더 이상 init() 호출이 필요하지 않습니다.

b). 이미 초기화 된 콜렉션에 대해 init()을 다시 호출해야한다. 부작용이 없어야한다.

우리가 가지고 나타나는 증상은 우리가 항상 초기화를 (전화를 볼 수 때로는 두 번째 전화가 indentical 수집 매개 변수를 사용하여) 지금까지 오류 메시지가

PROVISION_TABLE_SEARCH_FIELDS_MISMATCH in worklight.js at line 4556 

비록()에서 결과를 초기화하기 위해서이다.

+0

추가 정보 : 안드로이드로 실행 때 예상대로 API를 행동 것으로 보인다 모바일 웹 앱으로 실행될 때는 표시되지 않습니다. 테스트 케이스를 격리 할 경우 새로운 질문이 열립니다. – djna

답변

4

처음으로 컬렉션을 열거 나 저장소를 닫은 후에 다시 열 때만 init을 호출하면됩니다. JSONStore를 사용하고 보안 목적으로 닫으려는 경우 또는 여러 사용자를 사용하는 경우 다른 JSONStore 사용자로 전환하려는 경우에만 상점을 닫으려고합니다. 이 두 가지 상황에 대한 필요가 없으면 상점을 닫을 필요가 없습니다.

시작시 수집을 초기화하고 나머지 응용 프로그램의 수명주기 동안 열어 놓은 다음 응용 프로그램이 닫힐 때 닫을 수 있습니다. get이나 다른 JSONStore 메소드를 호출 할 때 init을 호출 할 필요가 없습니다. 처음으로 컬렉션을 사용할 때 또는 WL.JSONStore.closeAll() 또는 WL.JSONStore.destroy()를 호출하여 저장소를 닫거나 소멸 한 후에 만 ​​초기화를 호출하면됩니다.

오류가 발생하는 경우 검색 필드를 동적으로 변경할 수 없기 때문에 두 번째로 init을 호출 할 때 다른 필드를 전달한다는 것을 의미 할 수 있습니다. 검색 필드를 변경하려면 먼저 해당 콜렉션을 제거하고 그 내부의 데이터를 잃어 버린 다음 새 데이터로 다시 초기화해야합니다.

, 당신은 다음 예제 코드를 실행할 수 있습니다 (같은 인수) 초기화를 여러 번 호출 할 수 있는지 확인하려면 :

var collections = { 
      people : { 
      searchFields : {name: 'string'} 
      }, 
      orders : { 
      searchFields: {name: 'string'} 
      } 
     }; 

     WL.JSONStore.init(collections) 

     .then(function() { 
      return WL.JSONStore.init(collections); 
     }) 

     .then(function() { 
      return WL.JSONStore.init(collections); 
     }) 

     .then(function() { 
      //init called 3 times succesfully 
      alert('Multiple inits worked'); 
     }) 

     .fail(function (err) { 
      //this should not be called 
      alert('Multiple inits failed' + err.toString()); 
     }); 
관련 문제