2012-02-20 2 views
0

Использование ember.js я получаю бесконечный цикл со следующим кодом:ember.js дает цикл infinte при использовании {{}} #each тег в шаблоне

Контроллер:

App.activityDetailsController = Em.Object.create({ 
    activityBinding :  'App.navController.selectedActivity', 

    data : function(){ 
    var things = new Array(); 
    if(this.activity){ 
     var info = this.activity.get('info'); 
     var len = info.length; 
     for(var i=0; i<len; i++){ 
     for(prop in info[i]){ 
      things.push({"key": prop, "value" : info[i][prop]});  
     } 
     } 
    } 

    return things; 
    }.property('activity')  
}) 

Вид:

App.ActivityDetailsView = Em.View.extend({ 
    templateName :  'activity-details', 
    activityBinding :  'App.activityDetailsController.activity', 
    dataBinding :   'App.activityDetailsController.data' 

}) 

Шаблон:

<script type="text/x-handlebars" data-template-name="activity-details"> 
    <div id="info"> 
     {{#each data}} 
      {{key}}: {{value}}<br /> 
     {{/each}} 
    </div> 
    </script> 

При попытке загрузить эту страницу функция «данных» в контроллере называется бесконечно.

Если я удалю блок {{#each}} {{each}} из представления, нет проблем, и использование {{data.length}} в шаблоне даст правильный результат.

Любые идеи, почему этот цикл бесконечно? Если я удалю «действие» из вызова свойства, проблема будет такой же.

Спасибо,

+0

Подождите, не будут # возвращать данные, а не значение этой функции? Если вы хотите вернуть значение, почему бы не сделать его имуществом компьютера? – jasonpgignac

ответ

1

Сделайте свою собственность "данные" cacheable(). См. ebryn's answer на соответствующий вопрос по этой причине.

+0

Вот и все. Большое спасибо! – CHsurfer

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