2016-09-14 2 views
1

У меня есть проблема при использовании выхода и обновления метки в, см пример http://codepen.io/Pysta/pen/pEyoBYRiotJS тег внутри выход не обновляя

<script type="riot/tag"> 
    <maintag> 

    <yieldtag name='yield_tag'> 
     <select> 
     <option each={ items }>{ value }</option> 
     </select> 

    </yieldtag> 


    var self = this; 
    self.items = [ 
     {value:1}, 
     {value:2}, 
      {value:3}, 
     {value:4} 
    ]; 
     self.items = []; 

    this.on('mount', function() { 
     var oReq = new XMLHttpRequest(); 
     oReq.addEventListener("load", reqListener); 
     oReq.open("GET", "/api/category/0"); 
     oReq.send(); 
    }); 

    function reqListener(e) { 
     console.log('load'); 
     self.items = [ 
     {value:1}, 
     {value:2}, 
      {value:3}, 
     {value:4} 
     ]; 
     self.update(); 
    } 

    </maintag> 
</script> 


<script type="riot/tag"> 
    <yieldtag> 
    <yield /> 
    </yieldtag> 
</script> 

<maintag></maintag> 

Если я загрузить данные сразу (строка комментария с «self.items = [];») он работает так, как предполагается, но когда я делаю запрос и обновляю его, асинхронно ничего не меняется.

Если я удаляю урожайность изнутри maintag, он работает.

Любая помощь/предложения оценены.

ответ

0

Если изменить each={ items } к each={ parent.items } он будет работать, как ожидалось

Путаница с <yield /> является то, что вы пишете шаблон логики в <maintag>, но после того, как компоненты установлены, код на самом деле работает в <yieldtag> , Массив items существует в контексте <maintag>, который является родителем <yieldtag> после монтажа.

Дополнительную информацию о тегах для вложенности см. На Riot docs

Смежные вопросы