2012-01-30 71 views
10

我在backbone.js rails應用程序中使用handlebars,並且我有一個布爾字段,我正在填充一個複選框。使用handleBars bindAttr複選框

當我加載編輯頁面,表格填充了從服務器JSON的東西的內容類似

 
{id:3,user:'test',checkbox:1} 
現在

在我的車把的形式,我想表明複選框1

 
< input type="checkbox" name="checkbox" value="1" {{#if checkbox}} {{bindAttr checkbox checked="isSelected"}}{{/if}} > 

但這並未返回已選中的複選框。我真的很想說只能說if checkbox==1,但我不明白我如何用把手做到這一點。

Anysuggestions?

回答

-6

我最終爲此使用了一個handlebar幫助器。

+18

你能提供一個例子讓其他人可以學習嗎? – 2012-06-19 22:40:38

9

你通常會做什麼,是在'模型'中使用布爾值。

{ 
    isChecked: true 
} 

然後

<input type="checkbox" {{bindAttr checked="isChecked"}}> 

如果布爾是真實的,它將使checked屬性,如果布爾是假的,它會忽略的財產。所以,如果isChecked爲真,則把手將輸出

<input type="checkbox" checked> 

如果isChecked是假的,我們會得到

<input type="checkbox"> 

這正是我們想要的!

+0

用於將元素的「checked」屬性與控制器/上下文進行雙向綁定(以便在複選框被選中時更新控制器/上下文),您可以使用輸入助手:'{{input type =「checkbox」 checked = isChecked value =「1」data-unchecked-value =「0」}}' (但是由於'data-unchecked-value'不被ember輸入幫助程序支持,請參閱:http://stackoverflow.com/questions/9894335) – 2015-01-13 23:30:04

7

我也寫過一個幫手來做到這一點。它不使用Backbone.js的,因此可能是一些替代:

Handlebars.registerHelper('checked', function(currentValue) { 
    return currentValue == '1' ? ' checked="checked"' : ''; 
}); 

用例:

<input type="checkbox" name="cbxExample" id="cbxExample" {{checked cbxExample}}/> 

會剔一個複選框,如果所提供的是JSON:

{"cbxExample" : "1"} 

產生於:

<input type="checkbox" name="cbxExample" id="cbxExample" checked="checked" /> 

[我的第一篇文章 - 希望對你有幫助!]

+3

你可能想要使用一個三元'{'''''''''不會被'''轉義''{{checked cbxExample}}'輸出實際上會被'checked = "'"'在'{{{checked cbxExample}}}'中,我們得到正確的輸出('checked =「checked」')。 – 2014-08-28 20:31:32

+0

這幫助我處理了JSON ...... checked:「true」或「false」 - 作爲字符串 'return currentValue =='true'? '檢查':'';' – eon 2017-11-30 17:54:33