Apabila membina aplikasi EmberJS, seseorang mungkin menghadapi keperluan untuk memuatkan berbilang model data yang tidak berkaitan ke dalam satu laluan . Soalan ini menyelidiki pendekatan yang sesuai untuk tugasan tersebut.
Sebelum memulakan proses pemuatan, adalah penting untuk menentukan sama ada mengembalikan berbilang model dalam cangkuk model adalah wajar. Senario di mana pendekatan ini sangat tidak digalakkan ialah apabila laluan memuatkan data dinamik berdasarkan slug URL (cth., this.resource('foo', {path: ':id'})). Jika anda cuba memuatkan berbilang model di bawah keadaan sedemikian, kemungkinan isu timbul apabila memaut ke laluan. Ember akan memintas cangkuk model dan menggunakan model yang dibekalkan semasa pemautan, mengakibatkan tingkah laku yang tidak konsisten kerana anda menjangkakan mendapatkan berbilang model tetapi hanya menerima satu.
Apabila memuatkan berbilang model dalam laluan yang pendekatan cangkuk model tidak sesuai, pertimbangkan alternatif berikut:
Dalam setupController/afterModel Hook: Muatkan model tambahan dalam setupController atau afterModel cangkuk. Pendekatan ini membolehkan anda menyambungkan keputusan kepada pengawal anda secara manual jika perlu. Walau bagaimanapun, ambil perhatian bahawa untuk ini berfungsi, anda mesti mengembalikan janji daripada cangkuk afterModel apabila ia perlu menyekat peralihan seperti yang dilakukan oleh cangkuk model.
App.IndexRoute = Ember.Route.extend({ model: function(params) { return $.getJSON('/books/' + params.id); }, setupController: function(controller, model) { // Load additional model and set it on the controller controller.set('model2', { bird: 'is the word' }); } });
Dalam Cangkuk Model Laluan: Jika berbilang model yang tidak berkaitan perlu dimuatkan dan laluan tidak memuatkan data dinamik, cangkuk model boleh digunakan.
App.IndexRoute = Ember.Route.extend({ model: function() { return { model1: ['red', 'yellow', 'blue'], model2: ['green', 'purple', 'white'] }; } });
Menggunakan Janji: Apabila memuatkan model melibatkan permintaan tak segerak ( cth., panggilan pelayan), menggunakan janji untuk menyelesaikan operasi ini dan mengembalikan model yang terhasil dalam cangkuk model.
App.IndexRoute = Ember.Route.extend({ model: function() { return Ember.RSVP.hash({ model1: promise1, model2: promise2 }); } });
Atas ialah kandungan terperinci Bagaimana untuk Memuatkan Pelbagai Model Tidak Berkaitan dalam Satu Laluan EmberJS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!