将Meteor复选框状态与数据库

时间:2015-06-16 14:56:04

标签: javascript checkbox meteor-accounts meteor-helper

我的应用程序中有一个复选框,我想要做的是存储复选框的状态,即是否选中。一旦用户选中了复选框,它就会将其存储到数据库中,当他下次访问该页面时,应该检查它。

我正在尝试使用会话,它可以在同一个应用程序的不同页面上工作,但是一旦我重新加载页面就消失了。我猜会话适用于临时数据。什么应该用于永久数据?

HTML

<template name="test">
    <input type="checkbox" id="check" checked="{{Checked}}"> 
</template>

JS

Template.Test.events({
    'click #check':function(e){
        Session.set('Checked', e.target.checked);
    }
})

Template.Test.helpers({
    Checked: function(){
        return Session.get("Checked");
    }
})

1 个答案:

答案 0 :(得分:2)

http://meteorpad.com/pad/u3D5TDaMDDg8Aw2ie/Leaderboard

How long do certain Meteor data sources live for?

由于此复选框设置已同步到已登录的用户,因此您希望将此设置保存在已登录的用户身上。

<强> HTML

<body>

    {{> loginButtons }}

    {{#if currentUser}} 
      {{> Test }}
    {{/if}}

</body>


<template name="Test">
  <div class="container">
    <div class="row">
      <div class="col-xs-8 col-xs-offset-2">
        <input type="checkbox" id="check" checked="{{isChecked}}"> 
      </div>
    </div>
  </div>
</template>

Meteor Users系列很特别,您需要阅读它的功能

但就目前而言,您需要知道的是来自客户:

  • 您可以使用Meteor.user()

  • 访问当前登录的用户
  • 默认情况下,Meteor会将Meteor.user().profile字段发布到客户端。

  • 在客户端,您只能修改Meteor.user().profile字段。

  • 为了编辑/更新Meteor用户,您必须在Mongo userId命令中输入精确的update(用户文档的ID) - Meteor.users.update({_id: userId}, {$set: {"profile.isChecked": isChecked}}); < / p>

<强> JS

Template.Test.events({
    'click #check':function(e){
      var userId = Meteor.user()._id;
      var isChecked = e.target.checked;
      Meteor.users.update({_id: userId}, {$set: {"profile.isChecked": isChecked}}); 
    }
})

Template.Test.helpers({
    isChecked: function(){
      return Meteor.user().profile.isChecked;
    }
})

Accounts.ui.config({
  passwordSignupFields: "USERNAME_ONLY"
});