私は興味深い観察をしました。Meteorセッションストレージに保存されている配列を更新しようとすると、次のコードは変更を伝播しません。
var tags = Session.get("Tags");
tags.push("a");
Session.set("Tags", tags);
しかし、最初の行を使用するように変更する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);
}
これは以下を出力します:
1
Removing tag "a", index: -1, typeof(this) = string
したがって、どういうわけか、cardTags.indexOf(this);
ステートメントは-1
ほとんどすべての場合に返されるようです。私は今javascriptにかなり慣れているので、根本的に間違ったことをしていると思いますが、どういうわけかここで何が起こっているのか理解できません。
indexOf()へのこれら2つの呼び出しが異なる動作をするのはなぜですか?