Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更改反应数组中的值并重新运行帮助程序_Javascript_Arrays_Meteor_Helper - Fatal编程技术网

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

Javascript 如何更改反应数组中的值并重新运行帮助程序,javascript,arrays,meteor,helper,Javascript,Arrays,Meteor,Helper,我正在使用Meteor中的包,无法确定如何更改数组中的值并让助手重新运行。这是一件很基本的事情,我肯定错过了一些明显的东西,但我一直无法找到答案。这是我的密码: 在客户机上: test_arr = new ReactiveArray([3]); 助手: UI.registerHelper('array_test', function(){ return test_arr.list(); }); 在模板中: {{array_test}} 在屏幕上,我看到了预期的“3”,但如果我使用以下命

我正在使用Meteor中的包,无法确定如何更改数组中的值并让助手重新运行。这是一件很基本的事情,我肯定错过了一些明显的东西,但我一直无法找到答案。这是我的密码:

在客户机上:

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"

使用拼接。您可以创建一个方便的方法来处理单个元素。谢谢。测试_阵列。拼接(位置,1,新_值)工作正常。更好的是,在我的模板中使用{{{each}{{test_array}}{{/each}},助手只针对更新的值运行,因此它是有效的。您是否愿意将您的解决方案作为答案发布,以便我可以接受?我认为如果这个例子出现在文档中会很有用,因为我不可能是唯一错过这个的人。我还发现,如果完全重建数组,可能需要运行if(typeof my_array!=“undefined”)m_array.clear();以强制助手更新。