2011-10-12 19 views
6

Bu hatayı alıyorum ve nasıl çözülebilir bilmiyorum. Daha önce this link okudum.Widget == valores0 ile kaydedildi ancak bu kimlik zaten kayıtlı

DÜZENLEME: 1

index.php

<script type="text/javascript"> 

var slider = []; 

for (i = 0; i < 5; i++) { 

    slider[i] = (

    function(i) { 

     return function() { 

      var node = dojo.byId("input"+[i]); 
      var n = dojo.byId("valores"+[i]); 

      var rulesNode = document.createElement('div'+[i]); 
      node.appendChild(rulesNode); 

      var sliderRules = new dijit.form.HorizontalRule({ 
       count:11, 
       style:{height:"4px"} 
      },rulesNode); 

      var labels = new dijit.form.HorizontalRuleLabels({ 
       style:{height:"1em",fontSize:"75%"}, 
      },n); 

      var theSlider = new dijit.form.HorizontalSlider({ 
       value:5, 
       onChange: function(){ 
        console.log(arguments); 
       }, 
       name:"input"+[i], 
       onChange:function(val){ dojo.byId('value'+[i]).value = dojo.number.format(1/val,{places:4})}, 
       style:{height:"165px"}, 
       minimum:1, 
       maximum:9, 
        } 
      },node); 

      theSlider.startup(); 
       sliderRules.startup(); 
     } 

    })(i); 
    dojo.addOnLoad(slider[i]); 
} 

</script> 

Sorun

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#customForm").submit(function() { 
     var formdata = $("#customForm").serializeArray(); 

     $.ajax({ 
      url: "sent.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function(data) { 
       switch (data.livre) { 
       case 'tags': 
        $("#msgbox2").fadeTo(200, 0.1, function() { 
         $(this).html('Empty tags').fadeTo(900, 1); 
        }); 
        break; 

       default: 
        $("#msgbox2").fadeTo(200, 0.1, function() { 
         $(this).html('Update').fadeTo(900, 1, function() { 
          $('#conteudo').load('dojo/test_Slider.php'); 
         }); 
        }); 
        break; 
       } 
      } 
     }); 

     return false; 
    }); 
}); 
</script> 

test_slider.php: Öncelikle iyi, 5 kaydırıcılar ithal edilmektedir çalışır btn göndermek tıklayın. İkinci klik, bir güncelleme gerekiyordu, ama ben bu mesajı alıyorum edilir:

Tried to register widget with id==valores0 but that id is already registered 

[Demo video]2

cevap

3

Sadece @ eksik cevap ve @ Kevin'ın yorum eklemek için. Varolan dijitler boyunca kayıt defterine bakabiliriz:

+0

arasındaki aynı kimlik adlarına ihtiyacım var, bu yanıt kaldırılırsa bu yanıtlar benim için çalışır. Durumu açıklar mısınız lütfen? –

+0

Bu altı yaşında bir cevaptır. Kayıt işleminin hala aynı şekilde yapıldığından şüpheliyim. Fikir, eski parçacığı kaldırmaktı, ancak bu günlerde çok fazla dokunmadım, bu yüzden yeni sürümlere bağlanma. – fncomp

1

Sen döngü için iç işlev kapanışları yapma asırlık tuzağına düştü. AddOnLoad yangınları ve kaydırıcılar oluşturulduğunda, i 2'ye eşit olacak ve her iki sürgü de aynı DOM düğümlerini kullanmaya çalışacaktır (izin verilmeyen bir şey).

Herkese yeni bir i kopyasını verdiğinizden emin olmalısınız. Aşağıdaki çabuk oluyor: dijit.registry içinde

for(i=0; i<2; i++){ 
    (function(i){ 

     slider[i] = ... 

     //everything inside here remains the same 
     //except that they now use their own i from the wrapper function 
     //instead of sharing the i from outside. 
    }(i)); 
} 
+0

Eksik olan, sorunu çözmenizi önerir. Ama eğer bir .load (dojo.php) varsa ve her form için bir form gönderirseniz, dojo içeriğini yeniden yüklerim, tekrar bir id sorgusuyla bir sorunla karşılaşırım ... Ne demek istediğimi anlıyor musunuz? dojo dediğim her zaman x farklı IDS var. Ancak her bir yük için kimlik grubu aynıdır. – user455318

+0

Ben bunu çok biliyorum. Dojo'yu arayarak ne demek istiyorsun ve neden kimlikler senin için aynı şeydir? – hugomg

+0

sorunu şudur: İçe aktarıldığında, bu içeriği başka bir dosyaya dolaştıran bir düğmem var. Buradaki nokta, düğmeye birçok kez basılabiliyor ve içeriğin yenilenmesi gerekiyor. Bu tuşa ikinci kez tıkladıktan sonra tekrar ediyorum: Wid == input0 ile widget'ı kaydetmeye çalıştım ancak bu kimlik zaten kayıtlı. – user455318

1

Dijit deposuna etkin widget'lar ve benzersiz eleme olarak kimliklerini kullanır. Aynı kimliğe sahip dijitler oluşturamazsınız.

Yeni bir kaydırıcı dijiti oluşturmadan önce dojo.registry dosyasını temizlemeniz gerekir. id asla aynı olmayacak böylece 10 haneli rastgele sayı veya tarih saat kombinasyonu ile bir şey tarafından oluşturulan bir kimlik gibi herhangi bir sayı kimliğini atayabilirsiniz test_slider.php

dijit.registry["input"+ [i]].destroyRecursive(); 
+0

Geri dönüş fonksiyonundan sonra kodunuzu ekledim() {ve bu hatayı alıyorum: >>> dijit.registry ["input" + i] tanımlanmamış (aralığın 4'ü dışında 13). Dijit.registry ("input" + [i]) demek istediniz mi?destroyRecursive()? Bu durumda ben dijit.registry bir işlev değil (aralık 4 13) – user455318

+1

Üzgünüm Ben [i] koymak için cevabımı yanlış yazdım. İkinci hata mesajı, dijit.registry'in neden bir işlev değil, bir dizidir. dijit.registry ["input" + [i]] destroyRecursive(); – linkamp

+0

'input' + [i] [i] .toString() işlevini çağırır, i geri dönecek, bu gereksizdir. 'Input [' + i + ']' mu demek istediniz? – FloydThreepwood

0

üzerinde beyan dijit önce bu kodu ekleyin.

+0

Benzersiz bir kimlik kullanamıyorum. JS ve html – user455318