2013-03-30 47 views
6

我不能想象一個簡單的方法來保存一個布爾值與快遞和貓鼬。我有這樣的模式:如何使用貓鼬和表達式從複選框保存布爾值?

var ClientSchema = new Schema({ 
    name: {type: String, required: true, trim: true}, 
    active: {type: Boolean } 
}); 

var Client = mongoose.mode('Client', ClientSchema); 

這是我的控制器

exports.new = function(req, res) { 
    var client = new Client(); 
    res.render('clients/new', { item: client }); 
}; 

exports.create = function(req, res) { 
    var client = new Client(req.body); 

    client.save(function(err, doc) { 
    if (err) { 
     res.render('clients/new', { item: client }); 
    } 
    .... 
    }); 
}; 

這是我的看法

form(method='post', action='/clients', enctype='application/x-www-form-urlencoded') 
    input(type='text', name='name', value=item.name) 
    input(type='checkbox', name='active', value=item.active) 

貓鼬具有對PARAMS上req.body地圖的能力。在var client = new Client(req.body)行上,客戶端具有從req.body創建的屬性名稱,並從表單傳遞了正確的值,但屬性active並未反映複選框狀態。

我知道我可以解決這個問題,增加無功客戶端=新的客戶端(req.body)後,這條線,但我必須爲每一個複選框,我添加到我的方式做到這一點:

client.active = req.body.active == undefined ? false : true; 

問題編輯

我不需要在軌道上的紅寶石做那個技巧。如何在不爲每個複選框添加上一行的情況下使用複選框?這是從複選框保存值的唯一方法,還是有其他選擇嗎?

編輯

我這裏的模式是這樣定義的

var ClientSchema = new Schema({ 
    name: {type: String, required: true, trim: true}, 
    active: {type: Boolean, default: true } 
}); 

請注意,Active默認爲true,所以如果我取消選中該複選框,活動將是真正的另一起案件中,不是假的。

+0

我不確定你的問題是什麼 - 你只是不想讓行開始'client.active ...'? – UpTheCreek

+0

在軌道上的紅寶石,我不需要那樣做。我想知道使用複選框在express.js和mongoose上的最佳做法。我編輯了我的問題。 – Camilo

+1

與軌道上的ruby相比,express.js是一個極其微小的框架。 RoR所做的很多事情不會爲你做。你可能有更多的運氣搜索一個庫,它會爲你添加這個功能(嘗試https://npmjs.org/)。或者可能值得一看全功能的MVC風格的Web應用程序框架(可能基於快車)。其中一個選項是compound.js(http://compoundjs.com/) – UpTheCreek

回答

1
在軌道上

紅寶石會輸出一個隱藏字段旁邊一個複選框字段:

<input name="model_name[field_name]" type="hidden" value="false"> 
<input id="model_name_field_name" name="model_name[field_name]" type="checkbox" value="true"> 

這是要解決的事實,未選中的複選框不發送的發佈數據。有關詳情,請參閱Does <input type="checkbox" /> only post data if it's checked?

RoR的技巧是隱藏字段,複選框對於name屬性具有相同的值。如果複選框被選中,複選框字段的值將作爲發佈數據發送,否則將發送隱藏字段的值。

這無疑是回報率3.x版本的情況下

這個「疑難雜症」的更多信息可以在這裏找到:http://apidock.com/rails/ActionView/Helpers/FormHelper/check_box

你要麼需要實現這樣的事情在你的節點應用或像往常一樣檢查undefined