2015-04-24 38 views
1

我使用预编译的Handlebars模板。 我有以下代码:Handlebars - 如何访问“每个”范围中的模板数据?

<div id="{{ns}}paymentMethodsTabs"> 
    {{#each paymentMethods}} 
     <button id="{{ns}}{{paymentCardCode}}">{{paymentCardCode}}</button> 
    {{/each}} 
</div> 

在第一div,该ns模板数据是可用的和设置。 但each paymentMethods范围内,我不能访问它,我试图

<button id="{{../ns}}{{paymentCardCode}}">{{paymentCardCode}}</button> 

但它也不起作用。 (该模板返回null而不是HTML代码,我猜这是因为它无法找到引用,但我没有收到任何错误消息,并且它很难调试,对此有任何建议?它当我运行Handlebars.templates[path](data)

如何运行each循环并提供模板数据?

下面是我提供的模板中的数据:

{ 
    "ns": 'main-layout-default-', 
    "paymentMethods": [{ 
    "paymentCardCode": "CB", 
    "contractId": "1234" 
    }] 
} 
+0

你能准确地显示你传递的数据对象吗? (不一定是值,只是结构)。 –

+0

@PiotrJakubowski完成!实际上并不多。 – Vadorequest

+0

如果你从模板中删除ns的东西,它会工作吗?你不应该调用'Handlebars.templates [path](data)'而不是'Handlebars.templates(path,data)'吗? –

回答

0

这是不匹配图书馆。我的代码是由handlebars 3.0版本生成的,但我使用了运行时2.0,这就是为什么它失败了。

因此,解决办法的确是以下几点:

<div id="{{ns}}paymentMethodsTabs"> 
    {{#each paymentMethods}} 
     <button id="{{../ns}}{{paymentCardCode}}">{{paymentCardCode}}</button> 
    {{/each}} 
</div> 

感谢@kpdecker谁帮我出。 https://github.com/wycats/handlebars.js/issues/1011#issuecomment-96694058

0

问题就在这里,

{ 
    "ns": 'main-layout-default-', // <= missing comma 
    "paymentMethods": [{ 
    "paymentCardCode": "CB", 
    "contractId": "1234" 
    }] 
} 
+0

不,这是*再次*错误(因为数据是动态添加的,我没有复制/粘贴JSON,但我写了它,并忘记了这个逗号...)对不起,我的不好 – Vadorequest

0

的 “NS” 是 “paymentMethods” 之外。它不能超出它的范围。

{ 
    "ns": 'main-layout-default-', 
    "paymentMethods": [{ 
    "paymentCardCode": "CB", 
    "contractId": "1234" 
}] 

}

尝试

{ 
    "paymentMethods": [{ 
    "ns": 'main-layout-default-', 
    "paymentCardCode": "CB", 
"contractId": "1234" 
}] 
} 

否则,如果 “NS” 值相同的所有生成的数据,然后尝试

<button id="main-layout-default-{{paymentCardCode}}">{{paymentCardCode}}</button> 
+0

'ns'值是对所有的人来说都是一样的,这是一个适用于所有元素的名称空间。它必须是动态的,我不能写得很难。 – Vadorequest

相关问题