2015-08-31 209 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 –

相关问题