2012-02-20 110 views
0

使用Ember.js使用{{#each}}標籤時非常infinte環路我得到下面的代碼無限循環:Ember.js模板

控制器:

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

等待,不會#each數據返回一個函數,而不是該函數的值?如果你想返回一個值,爲什麼不把它作爲一個計算機屬性? – jasonpgignac 2012-02-20 18:13:44

回答

1

讓你的 「數據」 屬性cacheable()。有關相關問題,請參閱ebryn's answer

+0

就是這樣。非常感謝! – CHsurfer 2012-02-21 04:27:49