2012-07-08 89 views
0

您是否有過發佈SDK 2應用程序的示例,該應用程序向其「Gear」菜單添加條目,並允許用戶通過對話窗口將設置保存到首選項對象?SDK 2:設置對話框的示例

回答

1

簡短的回答是,現在這是不可能的。

我們正試圖找出允許用戶從自定義應用程序內部進行設置的最佳方式。由於每個應用程序都是在IFrame內部進行沙盒處理,所以App代碼無法與齒輪菜單進行交互(因爲它不在您的框架中)。

未來我們正在研究如何使自定義應用程序和拉力賽應用程序以統一方式與設置進行交互。

如果您正在查看存儲設置,可以查看App對象的文檔。在2.0p2版本的SDK中,我們添加了一些功能來幫助您管理應用程序的設置。 現在所有的自定義應用程序將不得不提供自己的界面來訪問設置。

+0

這看起來很不錯,可以讓我在那裏找到大部分路,但是我在使用它的時候遇到了一些麻煩。在我的launch()函數的頂部,我添加了:console.log('settings',this.settings); this.updateSettings({myKey:'是一個測試'});但在刷新時,設置似乎沒有改變,我不確定如何與設置對象交互(是否有doc?)。另外,設置的範圍是什麼?對於應用程序的特定用戶?謝謝!!! – kimon 2012-07-09 13:48:05

+0

現在,設置僅與應用程序的實例綁定。因此,如果該應用在儀表板上共享,則所有用戶都將具有相同的設置。如果你有兩個相同的應用程序,每個應用程序都有不同的設置。 – 2012-07-09 15:11:03

+0

此外,該設置將不會在應用程序不工作在拉力賽內。所以如果你使用本地文件工作,測試它會是一件痛苦的事情。 – 2012-07-09 15:17:36

2

我結束了使用ExtJS CookieProvider來保存我的應用程序的狀態。通過使用Cookie設置是每個用戶,我也使他們每個項目。 App類中我的代碼如下所示:

... 
sessionKey: function() { 
    return (this.getContext().get('appID') || 'MyAppName') + ':' + this.getContext().getProject()._ref; 
}, 

session: function() { 
    if (!this.state) 
    this.state = Ext.state.Manager.get(this.sessionKey()) || {}; 

    return this.state; 
}, 

saveSession: function(newState) { 
    var session = this.session(); 
    Ext.apply(session, newState); 
    Ext.state.Manager.set(this.sessionKey(), session); 
}, 

launch: function() { 
    Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider')); 
    ... 

要使用它,只需調用this.session()來獲取狀態,saveSession()的狀態合併回的偉大工程!

它甚至可以在開發模式下工作。請注意,除非您使用tell it to,否則Chrome(和其他瀏覽器?)不會將cookie保存在file://模式中。