Javascript 如何使用Meteor.Call从服务器存储区向客户端获取JSON数据,并在模板中同步更新返回数据?

Javascript 如何使用Meteor.Call从服务器存储区向客户端获取JSON数据,并在模板中同步更新返回数据?,javascript,json,meteor,Javascript,Json,Meteor,我在根/私有文件夹中有一个名为countries.json的文件。我想在newCampaignForm模板内的多选框中显示所有国家/地区名称。服务器上的getCountryList方法将json对象返回给客户端。 控制台日志始终显示返回的对象,有时打印未定义的对象,然后打印对象。但是,选择框通常不显示国家/地区列表;每次服务器重新启动时,当控制台日志最初未打印未定义时,仅执行一次。如何解决这个问题 阅读这里的各种QA,我想我必须使用Meteor.wrapAsync函数使函数同步,但我发现很难以正

我在根/私有文件夹中有一个名为countries.json的文件。我想在newCampaignForm模板内的多选框中显示所有国家/地区名称。服务器上的getCountryList方法将json对象返回给客户端。 控制台日志始终显示返回的对象,有时打印未定义的对象,然后打印对象。但是,选择框通常不显示国家/地区列表;每次服务器重新启动时,当控制台日志最初未打印未定义时,仅执行一次。如何解决这个问题

阅读这里的各种QA,我想我必须使用Meteor.wrapAsync函数使函数同步,但我发现很难以正确的方式编写Meteor.wrapAsync。作为一个初学者,我发现很难理解meteor文档,因为它缺少简单的示例,并且我对回调函数感到困惑。 如果Meteor.wrapAsync是这里的解决方案,那么请在下面重新编写我的代码。这是我的第一个问题。非常感谢

//客户端代码 Template.newCampaignForm.onRenderedfunction{ Meteor.调用'getCountryList',函数错误,结果{ 设置'cData',结果; }; } Template.newCampaignForm.helpers{ countryList:函数{ console.logSession.get'cData'; 返回会话。获取“cData”; } }; //服务器端代码 getCountryList:函数{ var country={}; country=JSON.parseAssets.getText'countries.JSON'; 返回国; } //循环模板 {{每个国家列表} {{name}} {{/每个}} 我创造了

还有这个

作为回答

还有你的问题:

可能您的JSON不是有效的数组 事件被渲染而不是onRendered 当countryList应该是一个数组时,您在模板上使用了错误的命名{{name}而不是{{this}},这取决于您的JSON我还不知道
JSON结果是什么样子的?它是一个像[‘德国’、‘法国’、‘西班牙’、‘美国’这样的值数组吗?否则不能通过每个循环。尽管使用被动变量更好,但我不知道它是否真的解决了用户的问题,正如我所说的。我猜这个问题来自其他地方。再次,它显示了一个有效的解决方案:使用正确的JSON字符串,这可能是这里的问题。感谢@tomFreudenberg&BraveKenny的快速响应:但是,这个解决方案不起作用,我已经尝试过使用ReactiveVar,但据我所知,问题出现了,因为它涉及服务器中的文件I/O操作。我已经在上面提到过,我总是在日志中获取返回的对象,第一个输出打印为未定义。然后,如果我重新启动meteor服务器,我也会得到表单中的值,但不是第一次加载。文件中的json数据如下所示:[link]再次查看第一个简单示例。我已经将其更新为您的JSON结构。注意,名字和代码也应该写在里面,比如名字:Country和代码:CodeHi,我给你写了所有文件和信息的要点。这应该会给你展示和工作。