Đây là một phiên bản mới của cũ question tôi:Meteor: Làm thế nào để kích hoạt chạy lại chức năng helper sau collectionHandle.ready() là đúng
Vì vậy, nhờ sự giúp đỡ Tom Coleman cuối cùng tôi đã tìm ra cách để kiểm tra đúng nếu một đăng ký đã sẵn sàng() hay không.
cấu trúc mã hiện tại của tôi trông như thế này:
/client/app.js:
eventsHandle = null;
groupsHandle = null;
// ...
// First Deps.autorun():
// Does not depend on any Session var, should just run every time
Deps.autorun(function() {
eventsHandle = Meteor.subscribe("events", function() {
console.log('Deps.autorun(): Events loaded');
});
});
// Second Deps.autorun():
// contains all subscriptions which are dependent on my Session var "ehash"
Deps.autorun(function() {
if(Session.get('ehash'))
groupsHandle = Meteor.subscribe("groups", Session.get('ehash'), function() {
console.log('Deps.autorun(): Groups loaded with ehash: ' + Session.get('ehash'));
});
});
// ...
Sau đó, tôi có cái nhìn cụ thể .js và các file .html cho tất cả các mẫu công cụ trong một thư mục có tên:
/client/views/
--> <page>.js:
Template.x.dataLoaded = function() {
if(Session.get('ehash'))
if(eventsHandle && groupsHandle && eventsHandle.ready() && groupsHandle.ready()) {
console.log('All data loaded!');
singleevent = Events.find({ehash: Session.get('ehash')}).fetch()[0];
return true;
}
}
này helper dataLoaded
kết thúc tốt đẹp về cơ bản mọi thứ trong mẫu tương ứng và hiển thị nội dung khi dataLoaded
trả về true hoặc người khác hiển thị trình quay tải.
Vấn đề là trong nhiều trường hợp, điều này không hoạt động vì mã dataLoaded này chỉ chạy một lần. Vì vậy, nếu hai tay cầm KHÔNG sẵn sàng() tại thời điểm dataLoaded được chạy, nội dung sẽ KHÔNG BAO GIỜ xuất hiện. Trong trường hợp này, tôi vẫn thấy tất cả sự xuất hiện của console.log từ tệp app.js (công cụ Deps.autorun()) nhưng nhật ký "Tất cả dữ liệu đã tải!" không bao giờ được nhắc đến.
Vì vậy, câu hỏi của tôi là: Làm cách nào để kích hoạt chạy lại mã này để dataLoaded
được chạy lại để nội dung cuối cùng sẽ hiển thị?
Trân
Bạn lưu trữ ứng dụng ở đâu? –
hiện là localhost. Tại sao cậu lại hỏi? –
Vì Heroku có chút lạ lùng trong Chrome đối với tôi. –