Setting Multiple Session Values at Once - Bug?


#1

After reading the latest “This Week In Meteor #3” I was keen to try out the ability to set multiple session variables at once. However, I use dot-notation in my session variable naming (perhaps wrongly!) to categorize related session variables together, so I had previously done the following (which worked):

  Session.set('healthMarks.create.name', '');
  Session.set('healthMarks.create.countryCode', '');
  Session.set('healthMarks.create.establishmentCode', '');

After attempting the “new” way of setting them all in one go:

  Session.set({
    'healthMarks.create.name': '',
    'healthMarks.create.countryCode': '',
    'healthMarks.create.establishmentCode': ''
  });

But the values remain set to their previous values. The following if statement in the ReactiveDict.set() code, returns false, and thus it thinks the old & new values are the same.

if (_.has(self.keys, key)) oldSerializedValue = self.keys[key];

Now I’m pretty darn sure this is an issue with using dot-notation in your session variable names, but perhaps that needs to be highlighted as a no-no in the documentation?


#2

Hey if this is the case, it looks like a real bug. Please file a bug on GitHub with a complete reproduction in the form of an app.


#3

As far as I am aware, I don’t need an app to reproduce it, its simply:

Session.set('this.is.a.test', 'some random value');
Session.set({ 'this.is.a.test': '' });
console.log(Session.get('this.is.a.test')); // > 'some random value'

#4

Looks like the bug is in setting values to falsey values, not anything about dots.


#5

Ah, well that is more of an issue than I thought!

It certainly doesn’t do it if you use the standard Session.set('name', value); syntax though.


#6

It’s ok now, I think, we fixed it in time for the release.


#7

Brilliant! I look forward to using it when the new version is released.