Mar*_*mer 11 javascript meteor
我做了一个有趣的观察.尝试更新存储在Meteor会话存储中的阵列时,以下代码不会传播更改:
var tags = Session.get("Tags");
tags.push("a");
Session.set("Tags", tags);
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改要使用的第一行Session.get("Tags").slice(),则取决于会话的所有内容都将相应更新.我想这是因为Meteor测试了一些相等的引用,因此不会更新任何内容.
有没有更好的方法来管理存储在流星会话存储中的列表?
如果我现在尝试从集合中删除一个元素(array.remove()从这里使用),行为结果有点......我在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);
}
Run Code Online (Sandbox Code Playgroud)
这输出:
1
Removing tag "a", index: -1, typeof(this) = string
Run Code Online (Sandbox Code Playgroud)
所以不知何故,几乎在任何情况下,该cardTags.indexOf(this);声明似乎都会回归-1.我想我正在做一些根本错误的事情,因为我现在对javascript,但不知怎的,我无法弄清楚这里发生了什么.
为什么对indexOf()的这两个调用会有不同的行为?
Pet*_*rov 10
我相信这与Backbone.js中的这种情况相同.为了触发更改事件,Meteor需要为数组提供新的引用,而不仅仅是旧数据的更新副本.
简而言之,为了获得"正确"的行为,您需要克隆数组,进行所需的更改,然后执行Session.set('foo',myCopiedArray).
| 归档时间: |
|
| 查看次数: |
5880 次 |
| 最近记录: |