如何更改 Reactive Array 中的值并重新运行 helper

How to change a value in a Reactive Array and rerun the helper

我在 Meteor 中使用 Reactive Array 包,但不知道如何更改数组中的值并让助手重新 运行。这是一件很基本的事情,我一定遗漏了一些明显的东西,但我一直找不到答案。这是我的代码:

在客户端:

test_arr = new ReactiveArray([3]);

帮手:

UI.registerHelper('array_test', function(){
  return test_arr.list();
});

在模板中:

{{array_test}}

在屏幕上我看到了预期的“3”,但是如果我用这个改变反应数组的值:

test_arr[0] = 4

屏幕上没有任何变化,即使我在控制台中 运行 test_arr.list(),我看到 [4]。如果我推送一个新值:

test_arr.push(5)

然后是助手 re运行s,我在屏幕上正确地看到了 4,5。所以这个值已经改变了,但是助手没有重新运行,直到我执行了一个不相关的'push'操作。

我在文档中看不到任何关于更新值的信息,只有添加和删除值。

有什么方法可以反应性地更新反应数组中的值吗?

当您按索引在数组中设置值时,看起来这个包不支持反应源。试试这个 package.

您可以使用 ReactiveArray.splice() 来替换反应数组中的元素,甚至可以创建一个处理单个元素的便捷方法:

ReactiveArray.prototype.setAt = function(pos, item) {
  return this.splice(pos, 1, item);
};

arr = new ReactiveArray(['a', 'b', 'c']);
// ["a", "b", "c"]

arr[0];
// "a"

arr.setAt(0, "newVal");
// ["a"]

arr[0];
// "newVal"