2013-02-13 17 views
8

Bir ajax isteğinden sonra güncelleştirdiğim bazı bilgileri göstermek için bir popover kullanıyorum. Temel olarak, vurguluda popover'ı tetikleyen öğenin veri içeriği özniteliğini güncelliyorum. Dom'u kontrol ediyorum ve veri içeriği ile ilgili şeyler kesinlikle güncelleniyor, ancak popletin içeriği aynı kalıyor. Düşünebildiğim her şeyi denedim ve basit bir şeyi kaçırdığımı hissetmeye başladım. Birisi bana yardım edebilir. Kızın bazı kod:Twitter bootstrap js popover içeriği, veri içeriği özniteliği güncellendiğinde güncellenmiyor

<ul> 
    <li class="player_name_li" rel="popover" data-placement="right" 
    data-html="true" data-title="Dude" data-trigger="hover" 
    data-content="<div class='custom_content'>Heres some content</div>" 
    data-original-title="" title=""><span class="player_name">Dude</span> 
    </li> 
</ul> 

ve şimdi o benim komut

$(document).ready(function(){ 
$('.player_name_li').popover({ 
    template: '<div class="popover" style="width:250px;"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'}); 

setInterval(function(){update_scores();}, 6000); 

function update_scores() 
{ 
    $.ajax({ 
     url: HOST_NAME, 
     type: 'POST', 
     //async: false, 
     data: {player_array: my_data_is_generated_from_page)} 
    }).done(function(results){ 
     var obj = $.parseJSON(results);  
     //this reloads the stupid popover data 
     $.each(obj.fancy_return, function(index, value){ 
     $('.player_info_link').each(function(){    
      var huh = $(this).closest('li'); 
      huh.attr('data-content', value.new_table); 
       }); 
     )}; 
} 

Ben şu hepsi beklediğim gibi çalışan ve ben dom teftiş tarafından doğrulanan her popover li veri-içerik güncellenerek Dediğim gibi, ancak li üzerinde durduğumda hala veri içeriğinin eski içeriğini gösteriyor. Bir kaç gönderiye baktım ve içeriğimi fonksiyona göre ayarlamayı denedim ve populasyonu content: function(){return $(this).data('content');} ile ama işe yaramadı. Ayrıca çalışmayı sağlayan her elementi yok etmeye ve yeniden oluşturmaya çalıştım, ancak bir aralık fonksiyonunda ve otomatik olarak ateşlendiğinde, bir açıklığa sahip olursanız açık bir popolu kapatır, bu da budala gibi görünüyor. Herhangi bir fikir?

+0

Sadece kodunuzda göremediğim için soruyorum - içeriği güncelleştirdikten sonra her bir populasyonu yeniden başlatıyor musunuz? – adamdehaven

+0

@AdamD Ya onları yeniden başlatıyordum ve işe yaramadı, ben de onları yok etmeye ve yeniden yaratmaya çalıştım. – Rooster

cevap

8

Bunu yapmanın uygun yolunun, belirtildiği gibi content: function(){return someDynamicContent} vermek olduğunu biliyorsunuz. Gördüğünüz tek sorun, belki de $('.player_name_li').data('content')'un otomatik olarak $('.player_name_li').attr('data-content') manipülasyonları ile senkronize kalmaması olduğunun farkında olmanızdır. AJAX geri aramanızdaki değişimin, content tanımındaki referansla aynı olduğundan emin olmanız gerekir. Eğer Sonra

$('.player_name_li') 
    .popover({ 
    template: '<div class="popover" style="width:250px;"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>', 
    content: function(){return $(this).data('content')} 
    }) 

tanımlarsanız

Eğer bu şekilde yaparsanız, eklenti perde arkasında tüm reinitializing yapacak

huh.data('content', value.new_table); 

kullanmak gerekir.

+0

Gecikme için üzgünüm ama diğer projelere yakalandım. Bir şansım olduğunda bu çözümü test edeceğim. Gördüğünüz şeyi yapmıyor gibi görünüyorsunuz, bu yüzden bir çözüm olarak görülüyor. – Rooster

+0

Ya. Bu hile yaptı. Aslında, sayfa yüklemesinde başlatma işlemini kaldırdım ve sadece aralıktaki işlevin aynı şekilde üzerine yazmasına izin verdim. Ama aynı çözümü kavramsal olarak. Teşekkürler! – Rooster

İlgili konular