Я сделал интересное наблюдение. При попытке обновления массива, хранящегося в хранилище сеансов 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() ведут себя иначе?