我做了一个有趣的观察。当尝试更新存储在 Meteor 会话存储中的数组时,以下代码不会传播更改:
var tags = Session.get("Tags");
tags.push("a");
Session.set("Tags", tags);
但是,如果我将第一行更改为 use Session.get("Tags").slice()
,则取决于会话的所有内容都会相应更新。我猜这是因为 Meteor 测试了一些引用的相等性,因此没有更新任何东西。
有没有更好的方法来管理存储在流星会话存储中的列表?
如果我现在尝试从集合中删除一个元素(使用array.remove()
from here),行为结果会有点......我在 Meteor 模板事件中执行此操作,代码如下所示:
"click .taglist li" : function(e) {
var tags = Session.get("Tags").slice();
var index = cardTags.indexOf(this);
Meteor._debug(Session.get("Tags").slice().indexOf("a"));
Meteor._debug("Removing tag \"" + this + "\", index: " + index, ", typeof(this) = " + typeof(this).toString());
tags.remove(index);
Session.set("Tags", tags);
}
这输出:
1
Removing tag "a", index: -1, typeof(this) = string
所以不知何故,该cardTags.indexOf(this);
声明似乎-1
几乎适用于任何情况。我想我在做一些根本错误的事情,因为我现在对 javascript 很熟悉,但不知何故我无法弄清楚这里发生了什么。
为什么这两个对 indexOf() 的调用会表现不同?