Javascript 如何更改反应数组中的值并重新运行帮助程序
我正在使用Meteor中的包,无法确定如何更改数组中的值并让助手重新运行。这是一件很基本的事情,我肯定错过了一些明显的东西,但我一直无法找到答案。这是我的密码: 在客户机上: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”,但如果我使用以下命
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();以强制助手更新。