如何更改反应数组中的值并重新运行帮助程序

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

本文关键字:重新运行 帮助程序 何更改 数组      更新时间:2023-09-26

我在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)

然后助手重新运行,我在屏幕上正确地看到4,5。因此,值已经更改,但直到我执行了一个不相关的"推送"操作,帮助程序才重新运行。

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

有没有办法更新反应数组中的值?

您可以使用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"

当您按索引在数组中设置值时,看起来这个包不支持反应源。试着检查一下这个包裹。