2013-03-13 49 views
3

我有一個lambda看起來像這樣一個鬍子模板:霍根並不支持拉姆達在預編譯模式

{{#myfunc}}myvalue{{/myfunc}} 

它由hogan.js預編譯,看起來像這樣:

define(['hogan'], 
function (Hogan) { 
    var template = new Hogan.Template(function (c, p, i) { 
     var _ = this; 
     _.b(i = i || ""); 
     if (_.s(_.f("myfunc", c, p, 1), c, p, 0, 11, 18, "{{ }}")) { 
      _.rs(c, p, function (c, p, _) { 
       _.b("myvalue"); 
      }); 
      c.pop(); 
     } 
     return _.fl();; 
    }); 
    return function (context, partial, indent) { 
     return template.render(context, partial, indent); 
    }; 
}); 

我渲染使用Marionette.ItemView傳遞lambda函數到Backbone.Model這樣的模板:

myfunc: function (key) { console.log("key", key); } 

的奇怪的事情:功能myfunc將被調用並登錄到控制檯,但它不被模板傳遞一個鍵。 我讀到Hogan在預編譯模式下不支持Lambda(大約一年前 - 我想這是固定的) - 但如果是這樣的話,myfunc會被調用嗎?

我把一些調試到我的供應商/ hogan.js庫 - 它看起來像霍根無法看到lambda標籤(這裏:myvalue)之間的值。

以前有人看過這個嗎?

+1

您是否找到解決方案?我有類似的問題 – DonutReply 2015-01-07 16:43:15

+0

不,只是避免了預先組合。 github上有一個補丁,但我沒有設法讓它運行。 – 2015-01-13 11:09:11

回答

1

我的調查: 只有在使用咕嚕插件,如咕嚕 - 霍根或咕嚕模板 - 霍根出現問題。 如果在使用Hogan.compile()在腳本中內聯渲染之前編譯模板,則問題已解決。

我在github上創建了一個小項目,因爲jsfiddle不允許使用grunt並將其鏈接到問題https://github.com/twitter/hogan.js/issues/225

項目:https://github.com/ssuvorov/hogan-issue

我的解決方案是必要的對象字段來代替lambda表達式。我的意思是在渲染前準備好所有必要信息的數據。