Массивы Javascript и сеанс Meteor

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

11
задан Marcus Riemer 2 August 2012 в 14:51
поделиться