Menggunakan Kaedah Meteor dalam Pembantu Templat
Senario biasa dalam pembangunan Meteor ialah keperluan untuk memanggil kaedah bahagian pelayan dari dalam pihak pelanggan pembantu templat. Walaupun mengimport kaedah secara terus ke dalam pembantu adalah mudah, pendekatan ini boleh membawa kepada isu pemaparan yang tidak dijangka.
Mari kita pertimbangkan contoh yang diberikan dalam soalan:
<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>
Walau bagaimanapun, apabila memaparkan templat, anda mungkin perasan bahawa templat tidak menerima sebarang nilai daripada kaedah viewTest. Ini timbul kerana Meteor cuba untuk memaparkan templat sebelum melengkapkan pelaksanaan kaedah.
Penyelesaian Dipertingkat
Untuk mengatasi cabaran ini, Meteor menyediakan pendekatan alternatif menggunakan pembolehubah reaktif:
<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>
Dalam pendekatan ini, pembolehubah reaktif myAsyncValue dicipta dalam cangkuk kitaran hayat yang dibuat contoh templat. Kaedah Meteor getAsyncValue kemudiannya digunakan, dan setelah selesai, keputusannya ditetapkan pada pembolehubah reaktif.
Dengan menggunakan pembolehubah reaktif, sebarang perubahan pada nilainya disebarkan secara automatik kepada pembantu yang sepadan, memastikan templat adalah dikemas kini secara reaktif apabila kaedah selesai.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Rendering Semasa Memanggil Kaedah Meteor dalam Pembantu Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!