Javascript 数组和 Meteor 会话

2024-02-02

我做了一个有趣的观察。当尝试更新存储在 Meteor 会话存储中的数组时,以下代码将不会传播更改:

var tags = Session.get("Tags");
tags.push("a");
Session.set("Tags", tags);

但是如果我改变第一行来使用Session.get("Tags").slice(),取决于会话的所有内容都会相应更新。我想这是因为 Meteor 测试了一些引用的相等性,因此不会更新任何内容。

有没有更好的方法来管理存储在 Meteor 会话存储中的列表?

如果我现在尝试从集合中删除一个元素(使用array.remove() from here http://ejohn.org/blog/javascript-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() 的这两次调用会有不同的行为?


我相信这与Backbone.js 中的这种情况 https://stackoverflow.com/a/12390273/1094784。为了触发更改事件,Meteor 需要有一个新的数组引用,而不仅仅是旧数组的更新副本。

简而言之,为了获得“正确”的行为,您需要克隆数组,进行所需的更改,然后执行 Session.set('foo', myCopiedArray)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 数组和 Meteor 会话 的相关文章

随机推荐

  • MySQL的设置操作

    MySQL可以使用Set操作吗intersect and except 如果可以请举个例子 如果不能的话 该怎么操作呢 在mysql中可以使用intersect 但是你必须稍微不同地编写它 这是一个例子 和here http www bit
  • 尝试从 Bitbucket 迁移到 Github,出现文件大小错误

    我正在尝试从 bitbucket 迁移到 github 我所做的就是从远程删除 bitbucket 并添加我的 github 帐户 然后我尝试git push u origin master但我有一个large file detected错
  • MooTools 中的 .getScript() 等效项?

    我想知道是否有一个与 jQuery 等效的 MooTools getScript 我非常确定 MooTools 中存在该文件 但我还没有找到它 我对 MooTools 不太熟悉 但看起来你可以使用Asset javascript http
  • 将 float64 数组转换为 float32 数组

    我有一个 float64 数组 想要将每个值转换为 float32 我试过了 What I have features64 120 float64 What I ve tried features32 120 float32 feature
  • 如何从命令行构建android apk?

    如何从命令行构建 APK 文件 我试过了 MSBuild myProject dproj p Config Release p Platform Android 但不会生成 APK 文件 只生成 so 文件 一些实验表明 建议的各种行动方案
  • 在 TypeScript 中使用符号作为对象键类型

    我正在尝试用 a 定义一个对象symbol https developer mozilla org en US docs Web JavaScript Reference Global Objects Symbol作为 key type 因
  • #ifdef DEBUG 与 #if DEBUG

    当使用编译器指令时 我不清楚以下两个代码片段中哪一个是正确 首选以及原因 似乎我见过的大多数开发人员和开源项目都使用第一个 但我也看到第二个也经常使用 ifdef DEBUG self doSomethingOnlyWhenDebuggin
  • 为什么应该使用基于文档的数据库而不是关系数据库?

    为什么我应该使用基于文档的数据库 如 CouchDB 而不是使用关系数据库 是否存在基于文档的数据库比关系数据库更适合的典型应用程序或领域 也许你不应该 第二个最明显的答案是 如果您的数据不相关 则应该使用它 这通常表现为没有简单的方法将数
  • Vertx JDBC 客户端 queryWithParams - 如何添加列表?

    我有带条件的 SQL 查询currency in 我正在使用 vertx JDBC 客户端queryWithparams方法 它接收 JsonArray 中的查询参数 我怎样才能传递我的可能列表currency查询的值 我试过new Jso
  • 购物车 $_SESSION 问题

    我正在开发一个基本的购物车 但是 SESSION 变量似乎未正确存储或访问 例如 如果您前往它将显示项目名称 但是在没有任何 GET 变量的情况下刷新 cart php 时 它不会返回任何内容 我究竟做错了什么
  • 如何使用javascript或html打开手机chrome浏览器

    我有两个问题 我要这个 我想使用 javascript 或 html 在其他 Android 移动网络应用程序 例如 naver firefox 等 上打开带有 url 的 chrome 浏览器 所以例子 如果用户在移动网络应用程序上单击
  • 在一台机器上运行多个 MySQL 服务器

    我们可以在一台机器上运行多个 MySQL 服务器吗 Thanks 是的 您只需在单独的端口上运行它们并将它们指向不同的 lib 目录以获取其数据 这是一个很好的参考 http dev mysql com doc refman 5 1 en
  • ASP.NET C# 大文件上传时出现 OutofMemoryException

    我有以下文件上传处理程序 public class FileUploader IHttpHandler public void ProcessRequest HttpContext context HttpRequest request c
  • 如何在表过滤器中显示“未找到记录”消息

    我根据两个 tds 在我的桌子上应用过滤器 过滤器正在工作 但如果没有值匹配 我想显示 未找到记录 消息 这是一个示例演示 filter click function var tdScoring tdEarning var scoring
  • AttributeError:“NoneType”对象没有属性“dpi_scale_trans”

    通过 StackOverflow 检查我遇到的上述错误的可能解决方案后 我发现一些解决方案无法解决这个特定问题 下图显示了尝试在图上绘制多个轴时遇到的错误和获得的不需要的图 This is an image of the expected
  • 错误模板设计

    似乎我在这个网站上读到了关于这个问题的另一个问题 答案 但我不记得答案是什么 现在我找不到原始帖子 我不喜欢 WPF 中的默认错误模板 我了解如何更改此错误模板 但是 如果我将一些内容添加到文本框的末尾 则文本框的大小不会改变 并且添加的内
  • Collections.shuffle() 真的足够随机吗?实际例子似乎否定了这个说法

    我有 1000 个独特的对象java util List 每个都引用一个图像 1000 个列表中的每个图像都是唯一的 现在我想对它们进行洗牌 以便我可以使用前 20 个对象并将它们呈现给网站用户 然后 用户可以单击 随机播放 按钮 然后我再
  • Cordova 应用程序中的触发事件

    我正在尝试触发事件 backbutton pause resume等 从浏览器手动在cordova中 用于调试 我按照以下方式进行 window trigger backbutton 当我们使用注册事件处理程序时 document on b
  • 如何使 Selenium 不等待整个页面加载,其脚本速度很慢?

    硒driver get url 等到整页加载 但是抓取页面会尝试加载一些无效的 JS 脚本 所以我的 Python 脚本等待它并且几分钟后不起作用 这个问题可能出现在网站的每个页面上 from selenium import webdriv
  • Javascript 数组和 Meteor 会话

    我做了一个有趣的观察 当尝试更新存储在 Meteor 会话存储中的数组时 以下代码将不会传播更改 var tags Session get Tags tags push a Session set Tags tags 但是如果我改变第一行来