Oli*_*oyd 13 html handlebars.js meteor
如何使用模板中的当前值正确预填充选择控件?
我有一个简单的表单来编辑一个记录,在显示表单时预先填充所选记录的值.有点像这样:
<input type="text" id="project_name_edit" value="{{selected_name}}">
Run Code Online (Sandbox Code Playgroud)
但是在我使用select控件的地方,我需要能够插入模板值并有条件地设置selected='selected'属性以获得正确的选项.
<select id="project_status_edit" value="{{selected_status}}">
<option>GOOD</option>
<option>BAD</option>
<option>UGLY</option>
</select>
Run Code Online (Sandbox Code Playgroud)
handlesbars.js提供#IF帮助器,但这只提供了真或假.
我可能会以各种方式破解它,但这似乎是一个标准解决方案的场景.
Jar*_*ish 16
你可以使用帮手:
Handlebars.registerHelper('selected', function(foo, bar) {
return foo == bar ? ' selected' : '';
});
Run Code Online (Sandbox Code Playgroud)
然后你可以打电话给:
<select id="project_status_edit">
<option{{selected foo "GOOD"}}>GOOD</option>
<option{{selected foo "BAD"}}>BAD</option>
<option{{selected foo "UGLY"}}>UGLY</option>
</select>
Run Code Online (Sandbox Code Playgroud)
使用:
{"foo":"UGLY"}
Run Code Online (Sandbox Code Playgroud)
试试吧:
虽然它似乎没有让我保存它. :(
cha*_*bra 11
所选答案不再有效.这是一个老问题,但我很难搞清楚这个简单的事情.这是我的解决方案:
Handlebars.registerHelper('selected', function(key, value){
return key == value? {selected:'selected'}: '';
});
Run Code Online (Sandbox Code Playgroud)
在当前版本的meteor中,我们无法设置没有值的HTML属性,并且meteor也不允许使用{{#if}}.但传递给帮助器的对象将转换为key = value对并注入.
UPDATE
因为Handlebars名称空间被折旧(https://github.com/meteor/meteor/wiki/Using-Blaze#handlebars-namespace-deprecated),所以请使用UI.registerHelper而不是Handlebars.registerHelper新的(> 0.8)版本的meteor .