2012-07-08 96 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://模式中。