2014-09-02 59 views
2

我想將流星會話變量重置爲默認值 - 這可能嗎?我可以將流星會話變量重置爲默認值嗎?

例子:

Session.setDefault 'foo', 'bar' 
Session.get 'foo' # => 'bar' 
Session.set 'foo', 'boing' 
Session.get 'foo' # => 'boing' 
delete Session.keys['foo'] 
Session.get 'foo' # => undefined 

但我想是這樣resetToDefault然後會做(上述後):

Session.get 'foo' # => undefined 
Session.resetToDefault() 
Session.get 'foo' # => 'bar' 

回答

2

我想出了這個代碼:

function MyReactiveDict(keys){ 
    ReactiveDict.call(this,keys); 
    this.defaults={}; 
} 
MyReactiveDict.prototype=Object.create(ReactiveDict.prototype); 

_.extend(MyReactiveDict.prototype,{ 
    setDefault:function(key,value){ 
     ReactiveDict.prototype.setDefault.call(this,key,value); 
     this.defaults[key]=value; 
    }, 
    resetToDefault:function(key){ 
     this.set(key,this.defaults[key]); 
    } 
}); 

MySession=new MyReactiveDict(); 

會議是ReactiveDict一個實例,所以我所做的就是通過繼承規則ReactiveDict定義我們自己MyReactiveDict,加上我們想要的功能,並最後宣佈MySession作爲MyReactiveDir的實例。

MySession將通過您在答案中描述的測試。

我想你甚至可以安全地使用下面的代碼保存已定義的鍵會覆蓋在你的應用程序Session

Session=new MyReactiveDict(Session.keys); 

這是因爲ReactiveDict構造可以利用現有的鍵開始的數組。

您需要meteor add reactive-dict才能使您的應用程序能夠正常工作。

2

有沒有像resetToDefault沒有的功能。

Session.setDefault實現這樣的:

setDefault: function (key, value) { 
    var self = this; 
    // for now, explicitly check for undefined, since there is no 
    // ReactiveDict.clear(). Later we might have a ReactiveDict.clear(), in which case 
    // we should check if it has the key. 
    if (self.keys[key] === undefined) { 
     self.set(key, value); 
    } 
    }, 

Source

你可以做的是創造與所有默認的JS對象,然後,一旦你想重置您只需訪問該對象得到應有的價值爲鑰匙和使用Session.set(key, value)

defaultsObject = { 
    A : 1, 
    B : 2 
} 
0

這是我的解決方案:只需創建一個函數,在其中設置所有會話變量。然後你稱這個功能。

resetToDefault = function() { 
    Session.set('expertMode', false); 
    Session.set('displayNavigation', false); 
    Session.set('displaySidebar', true); 
    Session.set('currentEvent', null); 
    Session.set('activeLayers', []); 
}; 

resetToDefault(); 

如果你確保你的功能是在客戶端/ lib中定義的,所以它會一切之前被調用,你也可以用它代替Session.setDefault的()。

之後,您可以在客戶端的任何地方調用resetToDefault()。

相關問題