我們使用Meteor.autorun查找'filters'會話變量中的更改,對服務器進行兩次異步調用以獲取過濾的數據,並使用結果更新兩個'list'會話變量。在另一個.autorun函數中,腳本等待列表會話變量的更改,然後打開適用的模板。可能從Meteor.autorun中排除依賴關係嗎?
所以,
Meteor.autorun(function(){
set_search_session(Session.get('filters'));
render_templates(
Session.get('places'),
Session.get('awards')
);
});
var set_search_session = function(filters) {
Meteor.call('search_places', filters.places, function(error, data) {
Session.set('places', data);
};
Meteor.call('search_awards', filters.awards, function(error, data) {
Session.set('awards', data);
};
};
var render_templates = function(places, awards) {
var filters = Session.get('filters');
if (!awards && _.isUndefined(filters['neighborhood'])) {
Session.set('template', 'place_detail');
};
};
的問題是,render_templates函數運行兩次,因爲它顯然仍依賴Session.get(「過濾器」)。所以在任何自動運行函數中,看起來你都不能使用與你正在觀察的變化分開的Session.get()函數。
有沒有辦法解決這個問題?
非常感謝您的幫助。
嘿感謝您的回答。 –
我避免了創建多個過濾器會話變量,以便可以使用一個Session.set重置或更新整個過濾器。我最終將篩選器作爲「獎項」和「場所」會話變量中的單獨屬性。創建單獨的Meteor.autorun函數運行良好。不確定其他人是否也有類似的挑戰,但它能夠隔離依賴關係可能是有用的。你們這些人用流星來做很棒的事情,互聯網已經是一個更好的工作場所。 –
是的,現在分離依賴關係的最簡單方法是將它們放在單獨的Session變量中:)也可以直接使用Context或ContextSet來創建自己的反應數據結構;會話只是完成最直接的反應任務所提供的最簡單的方法。 –