2016-04-28 17 views
1

Ich habe den folgenden Code:Wie kann ich Riot Tag an die Wurzel durch JS anhängen?

<my-tag> 

    <script> 
     var self = this; 
     riot.route('/test', function() { 
      self.root.innerHTML = '<some-riot-tag></some-riot-tag>'; 
      self.update(); 
     }); 
    </script> 
</my-tag> 

Wenn ich es ohne JS hinzufügen, funktioniert es:

<my-tag> 
    <some-riot-tag></some-riot-tag> 
</my-tag> 

Wie kann ich diese Arbeit zu machen mit Hilfe von Javascript? Das Tag wird dem DOM hinzugefügt. es wird jedoch nicht aktualisiert.

EDIT: kleine Änderungen.

+0

Ist dies, weil Sie "dynamische" Tags in "My-Tag" haben wollen? Also wird auf der Route x das Tag x gerendert und die Route y => tag y? – Phortuin

+0

Ja. Ich weiß nicht, ob das der richtige Weg ist, aber ich habe keine Ahnung, wie ich das sonst noch erreichen kann. – Gasim

Antwort

1

Ich denke, das Problem mit Ihrer Lösung ist, dass Riot das eingefügte HTML über JavaScript nicht als Riot-Tag analysiert. Ein anderer Ansatz könnte besser funktionieren, zum Beispiel:

<my-tag> 
    <some-riot-tag if="{ route == 'test' }" /> 
    <other-riot-tag if="{ route == 'bar' }" /> 

    <script> 
     var self = this; 
     riot.route('/test', function() { 
      self.route = 'foo'; 
      self.update(); 
     }); 
     riot.route('/bar', function() { 
      self.route = 'bar'; 
      self.update(); 
     }); 
    </script> 
</my-tag> 

Ein anderer Ansatz könnte das riot-tag Attribut (ich dies nicht getestet, aber es sollte funktionieren) werden:

<my-tag> 

    <div riot-tag="{ tagName }"></div> 

    <script> 
     var self = this; 
     riot.route('/test', function() { 
      self.tagName = 'some-riot-tag'; 
      self.update(); 
     }); 
     riot.route('/bar', function() { 
      self.tagName = 'other-riot-tag'; 
      self.update(); 
     }); 
    </script> 
</my-tag> 

bearbeiten: scheint wie riot-tag wird in der (nahen) Zukunft veraltet sein, aber die Lösung könnte immer noch arbeiten mit data-is: http://riotjs.com/guide/#html-elements-as-tags (leider, die richtige Dokumentation zu diesem scheint spärlich sein).

+0

Danke! Der erste Ansatz funktionierte. Der zweite hat nicht funktioniert. Ich habe sowohl "Riot-Tag" als auch "Data-Is" ausprobiert, aber kein Glück. Ich bin aber glücklich. – Gasim

+0

Gut zu hören! Wahrscheinlich leidet der zweite Ansatz unter dem gleichen Problem wie Ihr erstes Skript: Nach dem Setzen von "riot-tag =" some-riot-tag "" analysiert es das div [riot-tag] nicht als tatsächliches Riot-Tag – Phortuin