Флажок с Stormpath + Jade + node.js + экспресс

Я пытался расширить форму из этого руководства (https://stormpath.com/blog/build-nodejs-express-stormpath-app) для моего веб-приложения. Я хочу иметь флажок и в настоящее время иметь следующий код в моем нефритовом файле:

div.form-group
      label.col-sm-4 Sports
      div.col-sm-8
        input.form-control(placeholder='e.g. What sports are you interested in?',
          name='sports',
          type='checkbox',
          value="true")

Мой файл .js на стороне сервера выглядит следующим образом:

var profileForm = forms.create({
  givenName: forms.fields.string({
    required: true
  }),
  surname: forms.fields.string({ required: true }),
  city: forms.fields.string(),
  state: forms.fields.string(),
  zip: forms.fields.string(),
  sports: forms.fields.string()
});

// A render function that will render our form and
// provide the values of the fields, as well
// as any situation-specific locals

function renderForm(req,res,locals){
  res.render('profile', extend({
    title: 'My Profile',
    csrfToken: req.csrfToken(),
    givenName: req.user.givenName,
    surname: req.user.surname,
    city: req.user.customData.city,
    state: req.user.customData.state,
    zip: req.user.customData.zip,
    sports: req.user.customData.sports
  },locals||{}));
}

// Export a function which will create the
// router and return it

module.exports = function profile(){

  var router = express.Router();

  router.use(cookieParser());

  router.use(bodyParser.urlencoded({ extended: true }));

  router.use(csurf({ cookie: true }));

  // Capture all requests, the form library will negotiate
  // between GET and POST requests

  router.all('/', function(req, res) {
    profileForm.handle(req,{
  success: function(form){
    // The form library calls this success method if the
    // form is being POSTED and does not have errors

    // The express-stormpath library will populate req.user,
    // all we have to do is set the properties that we care
    // about and then call save() on the user object:
    req.user.givenName = form.data.givenName;
    req.user.surname = form.data.surname;
    req.user.customData.city = form.data.city;
    req.user.customData.state = form.data.state;
    req.user.customData.zip = form.data.zip;
    req.user.customData.sports = form.data.sports;
    req.user.customData.save();
    req.user.save(function(err){
      if(err){
        if(err.developerMessage){
          console.error(err);
        }
        renderForm(req,res,{
          errors: [{
            error: err.userMessage ||
            err.message || String(err)
          }]
        });
      }else{
        renderForm(req,res,{
          saved:true
        });
      }
    });
  },

Похоже, что статус флажка не сохраняется, потому что, когда я обновляю, он всегда возвращается к одному и тому же статусу. Кто-нибудь знает, как я могу создать флажки, которые сохраняют состояние в customData Stormpath, позволяя вам сохранить 10 МБ?


person Theo    schedule 30.05.2016    source источник


Ответы (1)


Проблема, похоже, связана с разметкой для элемента ввода, вам нужно указать, как установить атрибут checked для элемента на основе переменной sports, которую вы передаете в шаблон:

input.form-control(placeholder='e.g. What sports are you interested in?',
    name='sports',
    type='checkbox',
    value="true"
    checked=(sports ? "checked" : undefined))

Надеюсь, это поможет! Я работаю в Stormpath и написал обучающую статью, которую вы просматривали :)

person robertjd    schedule 03.06.2016