Meteor会话变量未存储数组
Meteor Session variable not storing array
我正在处理一个带有搜索选项过滤器的项目,它们通过会话进行更新,但会话变量实际使用数组时遇到了一些问题。它适用于非基于数组的值,但例如,当我传递一个包含RegExp对象的数组以在mongo$in选择器中使用时,它不会按预期工作。这些函数一直工作得很好,直到它在下面的代码片段中到达Session.set(),所以我知道我一定做错了什么:
Option.prototype.update = function () {
//updates session variable if static option
if (!this.isDynamic) {
if(Object.prototype.toString.call(this.value) === '[object Array]') {
var temp = this.value.slice(0);
Session.set(this.optionName, temp);
console.log(Session.get(this.optionName));
}
else {
Session.set(this.optionName, this.value);
}
};
};
无论出于何种原因,它都显示[Object],并且该数组中的对象为空。我已经阅读了其他关于Session变量和数组的Overflow文章,在传递数组之前简单地克隆数组似乎不起作用知道我做错了什么吗
您的代码是正确的(尽管有点复杂)。问题是Session只接受EJSON–able值,正则表达式不支持EJSON-able。从EJSON的角度来看,regex看起来就像一个空对象,这正是您在存储的数组中得到的。如果您尝试使用自定义原型或私有(不可枚举)属性存储对象,也会出现类似的问题:未序列化到EJSON的所有内容都会丢失。
这里的解决方案是创建您自己的序列化方法,该方法将使用正则表达式。例如,如果您总是有一个正则表达式的平面数组,那么您可以在存储之前简单地将它们字符串化:
var temp = _.map(this.value, function(regex) {
return regex.toString();
});
相关文章:
- Meteor会话变量未存储数组
- 在Javascript的Textbox中存储数组中的值
- 如何保留输入复选框值的存储数组
- 如何在 localStorage 中存储数组
- 如何在打包的 chrome 应用中本地存储数组
- 如何在 html5 的本地存储对象中存储数组
- 需要循环访问 json 数据的本地存储数组中存储的 json 对象
- 在 Javascript 中创建存储数组,并在每次单击时推送元素 ID
- 根据选中的复选框存储数组元素
- 如何存储数组javascript
- 存储数组在Chrome扩展
- 什么是最有效的方式来存储数组从PHP到JS/jQuery,这样它是可重用的
- Javascript存储数组值
- 存储数组到Cookie Jquery
- Ruby在遍历函数时尝试存储数组元素
- 如何从mongodb的形式存储数组
- 如何在html中打印存储在本地存储数组中的值
- 使用Firebase存储数组
- 获取字符串格式的MySQL存储数组并转换为JSON对象的数组
- 在html attr中存储数组值的最佳实践