我有一個流星應用程序,這是非常「慢」,因爲有很多API的調用。流星:Lazyload,渲染後加載。最佳實踐
我嘗試做的是掰開裝載/電話。
什麼,我只是做是:
- 我已經通過鐵路由器裝載模板
- 我waitOn第一個API呼叫完成
- 然後我開始在接下來的API通話Template.myTemplate.rendered - 功能
這對我的應用程序的速度已經是一個很大的好處,但是我想把它分解得更多,因爲第二個調用實際上更像是5-25個API調用。
所以我現在做裏面所呈現的功能是自稱只要沒有更多的工作要做,並保存會話內部的響應自調用函數。 (到現在爲止,它只是重寫,但即使這一點我不能得到)
Template.detail.rendered = function(){
//comma separated list of numbers for the API-Call
var cats = $(this.find(".extra")).attr('data-extra').split(',');
var shop = $(this.find(".extra")).attr('data-shop');
var counter = 0;
var callExtras = function(_counter){
var obj = {
categories : [cats[_counter]],
shop : shop
};
if(_counter <= cats.length){
Meteor.subscribe('extra', obj,function(result){
//TODO dickes todo... nochmal nachdenken und recherchieren
//console.log(_counter);
Session.set('extra',Extra.find('extra').fetch()[0].results);
counter++;
callExtras(counter);
});
}
};
callExtras(counter);
Session.set('loading_msg', '');
};
現在我有我的應用程序desscribed這裏的活性部位再次問題 - Meteor: iron-router => waitOn without subscribe正如我不能找到一個妥善的辦法更新我的客戶端每個用戶基礎集合。同樣在文檔中描述了發佈方法也創建了一個新的集合。 (新document's ID)在這裏 - http://docs.meteor.com/#/full/publish_added
這裏是從服務器發佈
Meteor.publish('extra', function(obj){
var that = this;
Meteor.call('extra', obj, function(error, result){
if (result){
//console.log(result);
that.added("extra", "extra", {results: result});
//that.changed('extra','extra',{results: result});
that.ready();
} else {
//that.ready();
}
});
});
所以我的問題是:是否有從頭開始構建我的代碼更好的方法手段解決問題有點不同?如果不是,我怎麼能實現它最清潔的方式?因爲根據我的理解,這只是一種奇怪的方式。
編輯:
例如。
我可以做一個每用戶收集(也許只有客戶端就像現在),並從服務器推送數據,只是訂閱本類別?但是,我怎樣才能檢查異步API調用何時啓動下一輪。所以視圖一塊一塊地獲取數據。我現在只是困惑。
這http://stackoverflow.com/questions/22147813/how-to-use-meteor-methods-inside-of-a-template-helper對解決我的問題足夠有幫助...我將在稍後回答我自己的問題 – delueg