2013-03-19 39 views
1

這是非常基本的,但我花了數小時的時間試圖弄清楚爲什麼我無法使用Handlebars的內置#if模板的#each循環內的#if助手。我插入到{{#如果}},Chrome瀏覽器(或Safari)崩潰和控制檯報告的參考。第二:在我的Handlebars模板的#each循環中#if的任何使用都會導致瀏覽器頁面崩潰

Uncaught RangeError: Maximum call stack size exceeded 
meta 
targetSetFor 
sendEvent 
Ember.Evented.Ember.Mixin.create.trigger 
Ember.CoreView.Ember.Object.extend.trigger 
newFunc 
(anonymous function) 
Ember.View.Ember.CoreView.extend.invokeRecursively 
newFunc 

(重複多次)

這是爲什麼害我在遞歸故障餘燼?

<div id="gridChannelListDiv" tabindex="0"> 
{{#each item in content}} 
    {{#if item.hilight}} 
     <div class="gridCellHilight"> 
      ... 
     </div> 
    {{else}} 
     <div class="gridCell"> 
      ... 
     </div> 
    {{/if}} 
{{/each}} 
</div> 

即使{{#if}}語句不執行任何操作,也會發生這種情況。

<div id="gridChannelListDiv" tabindex="0"> 
{{#each item in content}} 
    {{#if}}{{/if}} // this line will cause instant "oh snap" crash 

    <div class="gridCell"> 
     {{item.name}} 
    </div> 
{{/each}} 
</div> 

相關的ArrayController包含5個灰燼對象的簡單列表中的「內容」和模板,做工精細,直到我插入的#if。 擋板。

回答

1

您的代碼似乎沒有任何問題。可能是您的燼寶版本中的錯誤,或者是支持庫(handlebars/jQuery)的不兼容版本。無論是你的應用程序的某些其他方面發生了什麼瘋狂的事情。

我創建了一個簡單的應用程序/控制器,並使用它來獲取您的模板代碼並在此處運行:http://jsbin.com/ekemak/2/edit - 在Chrome和Safari中都嘗試過,兩種情況下應用程序都沒有js錯誤。

//app.js 
App = Ember.Application.create({}); 
App.IndexRoute = Ember.Route.extend({ 
    setupController: function(controller) { 
    controller.set('content', [ 
     Em.Object.create({name: 'aaa', hilight: false}), 
     Em.Object.create({name: 'BBB', hilight: true}), 
     Em.Object.create({name: 'ccc', hilight: false}) 
    ]); 
    } 
}); 


//index.hbs 
<ul> 
{{#each item in content}} 
    {{#if item.hilight}} 
    <div class="gridCellHilight"> 
     <B>{{item.name}}</B> 
    </div> 
    {{else}} 
    <div class="gridCell"> 
     {{item.name}} 
    </div> 
    {{/if}} 
{{/each}} 
</ul> 
+0

非常感謝。這有助於爲我縮小範圍。我會繼續調查...有一個機會,你最初的猜測是正確的 - 我加入的團隊正在使用一些庫,這些庫有幾個版本 - 也許他們只是壞了。謝謝。 – 2013-03-19 15:43:30

+0

這裏有一些猜測,因爲我們沒有確定地確定發生了什麼,但看起來這可能是由於動態加載和編譯模板文件以及在我們的視圖中對模板有過時的硬編碼引用。不知何故,我認爲這在某些情況下建立了一個遞歸循環,但是爲什麼#if會觸發它,不清楚,但是在移除對模板的硬編碼引用之後,事情似乎按預期行事。 – 2013-03-19 21:31:37

相關問題