2017-09-19 2 views
0

J'ai un ListView qui obtient des données FAQ à partir d'une table SQL (après qu'il a été téléchargé à partir d'un serveur dans la base de données). Les données de la FAQ sont téléchargées et correctement enregistrées dans la base de données (les saveQQs ci-dessous indiquent les FAQ correctes et mises à jour en cas de modification sur le serveur), mais l'interface utilisateur ListView n'affiche pas les modifications. Les FAQ correctes et mises à jour s'affichent uniquement dans ListView lorsque l'application redémarre.Comment mettre à jour/synchroniser automatiquement l'interface utilisateur ListView avec la modification de la collection de base de données dans Appcelerator?

Comment la liste automatiquement peut-elle être mise à jour lorsque l'utilisateur actualise/recharge?

faqs.xml

<Collection src="faqCollection" instance="true" id="faqData"/> 
. 
. 

<ListView id="faqListView" defaultItemTemplate="plainTemplate"> 
    <RefreshControl id="refresh" onRefreshstart="reloadFAQs" platform="ios"/> 
    <Templates> 
     <ItemTemplate name="plainTemplate" id="plainTemplate"> 
      <View width="98%" class="listViewRow"> 
       <Label bindId="title" id="title"/> 
      </View> 
     </ItemTemplate> 
    </Templates> 
    <ListSection id="faqListSection" dataCollection="$.faqData" > 
     <ListItem title:text="{faq_title}" nid:itemId="{faq_nid}" mainText:text="{faq_text}" template="{template}"/> 
    </ListSection> 
</ListView> 

faqs.js

function autoSaveFAQs(faqs){ 
$.faqData.deleteAll(); 
console.log("faqs in autosave: " + JSON.stringify(faqs)); 
var f; 
_.each(faqs, function(faq){ 
     faq.time = now; //adds the timestamp when FAQs have been downloaded 
     f = Alloy.createModel('faqCollection', faq, {silent: true}); 
     $.faqData.add(f); 
     f.save(); 
}); 
var savedFAQs = $.faqData; 
savedFAQs.fetch(); 
console.log("savedFAQs: " + JSON.stringify(savedFAQs)); //shows the updated FAQs when reloaded, but the listview is not populated 
} 

Répondre

0

SOLUTION:

Il y avait une méthode .destroy de $() trop quand les données ont été extraites:

$.faqData.on('fetch', function() { 
if (OS_IOS) { 
$.refresh.endRefreshing(); //only works on Android with AppC SDK 6.2 
} 
// $.destroy(); //too much cleaning. updates automatically when not destroyed after refreshEnd 
});