在模板助理中使用 Meteor 方法
Meteor 開發中的一個常見場景是需要從客戶端呼叫伺服器端方法模板助理。雖然直接將方法匯入到助手中很簡單,但這種方法可能會導致意外的渲染問題。
讓我們考慮問題中提供的範例:
<code class="js">// lib/test.js Meteor.methods({ viewTest: function (str) { return str; } }); // client/myView.js Template.helloWorld.helpers({ txt: function () { var str = Meteor.call('viewTest', 'Hello World.'); return str; } });</code>
但是,在渲染範本時,您可能會注意到範本沒有從 viewTest 方法接收任何值。出現這種情況是因為 Meteor 嘗試在完成方法執行之前渲染模板。
增強的解決方案
為了克服這個挑戰,Meteor 提供了一種使用反應變數的替代方法:
<code class="js">// client/myView.js Template.helloWorld.helpers({ txt: function () { return Template.instance().myAsyncValue.get(); } }); Template.helloWorld.created = function () { var self = this; self.myAsyncValue = new ReactiveVar("Waiting for response from server..."); Meteor.call('getAsyncValue', function (err, asyncValue) { if (err) console.log(err); else self.myAsyncValue.set(asyncValue); }); };</code>
在此方法中,反應式變數myAsyncValue 是在模板實例的已建立生命週期掛鉤中建立的。然後呼叫 Meteor 方法 getAsyncValue,完成後,其結果將設定在反應變數上。
透過使用反應變量,對其值的任何更改都會自動傳播到相應的幫助程序,確保模板是方法完成時進行反應式更新。
以上是在模板助手中呼叫 Meteor 方法時如何避免渲染問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!