在模板助手中使用 Meteor 方法
在 Meteor 中,模板助手向模板提供反应数据。出现一个常见问题:我们可以直接从这些助手中访问 Meteor 方法吗?
考虑以下代码:
<code class="javascrip">// server-side method Meteor.methods({ // viewTest method to return a string viewTest: function(str) { return str; } }); // client-side helper Template.helloWorld.helpers({ // attempt to call 'viewTest' method txt: function() { return Meteor.call('viewTest', 'Hello World.'); } });</code>
当尝试渲染模板时,助手函数会抛出错误,表明该方法不存在。这是因为 Meteor 会在客户端注册方法之前尝试渲染模板。
替代实现
Meteor 0.9.3.1 中有一个更新的方法可以解决这个问题问题:
<code class="javascript">// client-side template Template.helloWorld.helpers({ txt: function() { return Template.instance().myAsyncValue.get(); } }); // client-side 'created' callback Template.helloWorld.created = function() { // create a ReactiveVar instance and attach it to the template this.myAsyncValue = new ReactiveVar("Waiting for response from server..."); // call the 'getAsyncValue' method and update the ReactiveVar when the callback fires Meteor.call('getAsyncValue', (err, asyncValue) => { if (err) console.log(err); else this.myAsyncValue.set(asyncValue); }); };</code>
此解决方案使用 ReactiveVars,它们是与模板实例绑定的反应式数据源。通过将方法结果存储在 ReactiveVar 中并在回调中更新它,助手可以响应式地访问返回值。
以上是您可以直接从模板助手调用 Meteor 方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!