2016-03-25 19 views
0
Projem gerektirir

: dinamik global var olan javascript yük

  • daha sonra değişken değiştirip ise yine aynı javascript yük bu küresel değişkeni
  • kullanan harici JavaScript yüklemek küresel değişkene

    • istenen değerlerin harici javascript (Google Blockly kullanarak) olarak görünür:

      Blockly.Blocks[block_name+'_autogetter_state'] = { 
          init: function() { 
           this.setName(block_name); 
          } 
      }; 
      

    ve genel değişkeni block_name olduğu gibi değişkeni geçtiği için değişkeni geçti ve değerini değil. Yani javascript'i iki kez çağırırsam ve HTML'ye yüklerseniz, her iki bloğun da aynı görünüyor. AJAX

    $('#htmlElement').append('<script src="' + jsURL + '" type="text/javascript"><\/script>'); 
    

    ve ayrıca daha sonra <script> etiketi arasında HTML yüklemek:

    muhtemelen javascript yük yolu önemli değildir, denedim. İlk olması gerekirken ilk blok, aynı zamanda name = B ve ikinci ile

    <script> var block_name='';</script> 
    <div id="htmlElement"> 
         <script> 
          block_name='A'; 
          Blockly.Blocks[block_name+'_autogetter_state'] = { 
           init: function() { 
            this.setName(block_name); 
           } 
          }; 
          block_name='B'; 
          Blockly.Blocks[block_name+'_autogetter_state'] = { 
           init: function() { 
            this.setName(block_name); 
           } 
          }; 
         </script> 
    </div> 
    

    yaparken adıyla bloğu kullandığınızda A ve ikinci B. Eğlence kısım geliyor: gibi

    böylece ithal kod sonra görünüyor Bir sistem çalışır, bu nedenle sistem A adında bir bloğu bilir, ancak B ismiyle görüntülenir.

    Aynı zamanda asenkron olarak yüklenirken, global değişken A yarısı ile doldurulur ve B yöntemi olurken arka arkaya işlevler kullanılır. .Blocks devraldı ve B ...

    Ama şimdi, global değişkeni içe aktardığım javascript'e aktarma ile ilgili bir sorun olmadığından emin olmak istiyorum ... Yaratıcılığım bu davada oldukça geçtiğim için herhangi bir öneriye açığım var ...

  • cevap

    1

    kod tekrarından kaçınmak için bir dizi ve bir döngü kullanmak ve ölçeklenebilirlik geliştirmek Could:

    var block_names = ['A', 'B']; 
    block_names.forEach(function(block) { 
        Blockly.Blocks[block + '_autogetter_state'] = { 
        init: function() { 
         this.setName(block); 
        } 
        };  
    }); 
    

    // edit: isimAta fn engellemek block_name.

    +0

    Sorun nedir açık değil. – charlietfl

    +0

    Merhaba charlietfl, birkaç denemeden sonra çalışmayı yaptım ve senin çözümün doğruydu, neler olduğunu anlatan başka bir açıklama yapabilir miydin? Görebildiğim gibi, global değişkenleri kullanmanın bir hatasıydı, çünkü sizin çözümünüzde forEach işlevinin özel değişkeni kullanılır, böylece Bloklar işlevleri global olmadıkları için aynı değişkenlerden geçmez. Doğru mu? Çok teşekkür ederim! – Wenza

    +0

    Ayrıca üzgünüm, önceki yorum yarısı bitmişti ve bunu geçtim, daha sonra sınama yaparken sildim testini yaparken gördüm, bu yüzden muhtemelen eski yorumun parçasını gördün – Wenza