2013-04-16 4 views
0

Я пробовал это много и много способов за последнюю неделю, но я не могу заставить обратные вызовы JSONStore работать последовательно. Я работаю над Mac под управлением Worklight 5.0.6. Я расскажу, что я считаю самым простым примером: код, созданный из генератора JSONStore Worklight с жестко закодированными значениями.События JSONStore не срабатывают

После инициализации коллекций и вызова функции типа findAll() не запускаются ни успешные, ни обратные вызовы отказа. У меня были обратные вызовы, но не последовательно или надежно. Я не могу объяснить, почему это в основном не работает.

Я пробовал это как с помощью рамки обещания jQuery, так и с устаревшими методами обратного вызова. В обоих случаях обратные вызовы не вызываются. Я также попытался вызвать destroy() в JSONStore, чтобы принудительно создать новое создание.

function initContactsCollection() { 

if ((WL.Client.getEnvironment() === 'iphone' || 
WL.Client.getEnvironment() === 'ipad' || 
WL.Client.getEnvironment() === 'android') && 
typeof cordova !== 'undefined' && 
typeof WL.JSONStore !== 'undefined' && 
typeof jQuery !== 'undefined' && 
typeof jQuery.event.trigger === 'function') { 

// var pwd = prompt('Enter your password'); 

var contacts = WL.JSONStore.initCollection("contacts", 
     {"agentId":"string","notes.isSuccessful":"boolean","firstName":"string","workPhone":"string","email1":"string","email2":"string"}, 
    { 
     //password: pwd, 

     adapter : { 
      name: 'ams', 
      replace: 'updateContact', 
      remove: 'deleteContactNote', 
      add: 'addNewContact', 
      load: { 
       procedure: 'getContacts', 
       params: ["AA12345678910X-DB"], 
       key: 'contacts' 
      }, 
      accept: function (data) { 
       return (data.status === 200); 
      } 
     } 
    }); 

contacts.promise 

.done(function() { 
    WL.Logger.debug('[JSONStore] contacts is ready to be used.'); 

    contacts.count().done(function(res){ 
     if(res < 1){ 
      customers.load(); 
     } 
    }); 
}) 

.fail(function (errObj) { 
    WL.Logger.debug('[JSONStore]' + errObj.toString()); 
}); 

} else { 
    WL.Logger.debug('[JSONStore] Check your dependencies.'); 
} 


} // end function 

Cordova console

+1

Просто быстрый комментарий, пожалуйста, посмотрите на [WL.JSONStore.init] (http://pic.dhe.ibm.com/infocenter/wrklight/v5r0m6/topic/com.ibm.worklight.help. doc/apiref/r_wl_jsonstore_init.html) в качестве непринужденной альтернативы [WL.JSONStore.initCollection] (http://pic.dhe.ibm.com/infocenter/wrklight/v5r0m6/topic/com.ibm.worklight.help .doc/apiref/r_wl_jsonstore_initcollection.html). – cnandreu

ответ

1

Есть целый ряд ошибок в вашем JavaScript, вы звоните customers.load вместо contacts.load, и вложенность обещает, что у вас есть, вероятно, не то, что вы хотеть. У меня нет адаптера, поэтому я не могу сделать 100% уверенным, что этот код работает, но он будет очень близок к тому, что вы хотите.

function initContactsCollection() { 

    if ((WL.Client.getEnvironment() === 'iphone' || 
     WL.Client.getEnvironment() === 'ipad' || 
     WL.Client.getEnvironment() === 'android') && 
     typeof cordova !== 'undefined' && 
     typeof WL.JSONStore !== 'undefined' && 
     typeof jQuery !== 'undefined' && 
     typeof jQuery.event.trigger === 'function') { 

// var pwd = prompt('Enter your password'); 

    var contacts = WL.JSONStore.initCollection("contacts", 
     {"agentId":"string","notes.isSuccessful":"boolean","firstName":"string","workPhone":"string","email1":"string","email2":"string"}, 
     { 
      //password: pwd, 

      adapter : { 
       name: 'ams', 
       replace: 'updateContact', 
       remove: 'deleteContactNote', 
       add: 'addNewContact', 
       load: { 
        procedure: 'getContacts', 
        params: ['AA12345678910X-DB'], 
        key: 'contacts' 
       }, 
       accept: function (data) { 
        return (data.status === 200); 
       } 
      } 
     }); 

     contacts.promise 

     .then(function() { 
      WL.Logger.debug('[JSONStore] contacts is ready to be used.'); 

      return contacts.count(); 
     }) 
     .then(function(res){ 
      var newDeferred; 
      if(res < 1){ 
       WL.Logger.debug('DB Empty, calling load'); 
       return contacts.load(); 
      }else{ 
       newDeferred = $.Deferred(); 
       setTimeout(function(){ 
        newDeferred.resolve(0); 
       }); 
       return newDeferred; 
      } 
     }) 
     .then(function(){ 
      WL.Logger.debug('done with setup stuff'); 
     }) 

     .fail(function (errObj) { 
      WL.Logger.debug('[JSONStore]' + errObj.toString()); 
     }); 

    } else { 
     WL.Logger.debug('[JSONStore] Check your dependencies.'); 
    } 


} // end function