2015-08-31 123 views
1

這是我迄今爲止的複選框。 我希望至少有一個複選框被選中 - 這怎麼實現?流星複選框組 - 至少選中一個複選框

SOLUTION:

HTML: 

    <form> 
     <ul> 
      {{#each checkbox}} 
      <li> 
       <input type="checkbox" checked="{{checked}}" class="toggle-checked"> {{name}}: {{checked}} 
      </li> 
      {{/each}} 
     </ul> 
    </form> 

JS: 

    Cbtest = new Mongo.Collection('cbtest'); 

    Template.checkbox.helpers({ 
     checkbox: function() { 
      return Cbtest.find(); 
     } 
    }); 

    Template.checkbox.events({ 
     "click .toggle-checked": function (event) { 
      var self = this; 
      //deactivate the checkboxes visually 
      event.preventDefault(); 
      Meteor.call("setChecked", self._id, !self.checked); 
     } 
    }); 

    Meteor.methods({ 
     setChecked: function (checkboxId, setChecked) { 
      //deactivate the checkbox value change in the database 
      if (!setChecked && CheckboxResources.find({ 
       checked: true 
      }).count() === 1) 
      return; 
      Cbtest.update(checkboxId, { 
       $set: { 
        checked: setChecked 
       } 
      }); 
     } 
    }); 

我想避免jQuery和JavaScript和堅持只underscorejs。

在此先感謝! Vin的

回答

2

您只需確保有至少兩個更新當前項目check: false前檢查項目:

Meteor.methods({ 
    setChecked: function (checkboxId, setChecked) { 
     if (!setChecked && Cbtest.find({checked: true}).count() === 1) 
      return; // or throw error 
     Cbtest.update(checkboxId, { 
      $set: { 
       checked: setChecked 
      } 
     }); 
    } 
}); 
+0

感謝 - 這適用於數據庫值,但最後的複選框仍然可以選中 - 我怎樣才能防止呢? –

+0

明白了!剛添加「event.preventDefault();」到Template.checkbox.events –

相關問題