Javascript SDK 2:设置对话框示例

Javascript SDK 2:设置对话框示例,javascript,extjs,rally,Javascript,Extjs,Rally,您是否有一个SDK 2应用程序的示例,该应用程序在其“Gear”菜单中添加了一个条目,并允许用户通过对话框窗口将设置保存到首选项对象?简短的回答是,目前这是不可能的 我们正试图找出一种最好的方式,允许用户从自定义应用程序内部与设置交互。由于每个应用程序都是在IFrame内部的沙盒,因此没有应用程序代码可以与gear菜单交互(因为它位于您的框架之外) 未来,我们将研究如何使定制应用程序和拉力应用程序以统一的方式与设置交互 如果要存储设置,可以查看对象的文档。在SDK的2.0p2版本中,我们添加了一

您是否有一个SDK 2应用程序的示例,该应用程序在其“Gear”菜单中添加了一个条目,并允许用户通过对话框窗口将设置保存到首选项对象?

简短的回答是,目前这是不可能的

我们正试图找出一种最好的方式,允许用户从自定义应用程序内部与设置交互。由于每个应用程序都是在IFrame内部的沙盒,因此没有应用程序代码可以与gear菜单交互(因为它位于您的框架之外)

未来,我们将研究如何使定制应用程序和拉力应用程序以统一的方式与设置交互

如果要存储设置,可以查看对象的文档。在SDK的2.0p2版本中,我们添加了一些功能来帮助您管理应用程序上的设置。
现在,所有自定义应用程序都必须提供自己的界面来访问设置。

简单的回答是,现在这是不可能的

我们正试图找出一种最好的方式,允许用户从自定义应用程序内部与设置交互。由于每个应用程序都是在IFrame内部的沙盒,因此没有应用程序代码可以与gear菜单交互(因为它位于您的框架之外)

未来,我们将研究如何使定制应用程序和拉力应用程序以统一的方式与设置交互

如果要存储设置,可以查看对象的文档。在SDK的2.0p2版本中,我们添加了一些功能来帮助您管理应用程序上的设置。
现在,所有自定义应用程序都必须提供自己的接口才能访问设置。

我最终使用ExtJS CookieProvider保存应用程序的状态。通过使用cookies,设置是针对每个用户的,我也针对每个项目进行设置。我在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()将状态合并回。很好


它甚至可以在开发模式下工作。请注意,Chrome(和其他浏览器?)不会以file://模式保存Cookie,除非您使用。

我最终使用ExtJS CookieProvider保存我的应用程序状态。通过使用cookies,设置是针对每个用户的,我也针对每个项目进行设置。我在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()将状态合并回。很好


它甚至可以在开发模式下工作。请注意,Chrome(和其他浏览器?)不会以file://模式保存Cookie,除非您这样做。

这似乎很好,可以让我在大多数情况下都能做到这一点,但我在使用它时遇到了一些问题。在我的launch()函数的顶部,我添加了:console.log('settings',this.settings);this.updateSettings({myKey:'是一个测试'});但在刷新时,设置似乎不会更改,我不确定如何与设置对象交互(是否有文档?)。另外,设置的范围是什么?对于应用程序的特定用户?谢谢目前,这些设置仅绑定到应用程序的实例。因此,如果该应用程序在仪表板上共享,所有用户都将具有相同的设置。如果你有两个相同的应用程序,每个应用程序都将有不同的设置。此外,这些设置在应用程序不在Rally内托管的情况下将不起作用。因此,如果你是从本地文件工作,测试它可能会很痛苦。这似乎很好,可以让我在大部分的方式,但我有一些麻烦使用它。在我的launch()函数的顶部,我添加了:console.log('settings',this.settings);this.updateSettings({myKey:'是一个测试'});但在刷新时,设置似乎不会更改,我不确定如何与设置对象交互(是否有文档?)。另外,设置的范围是什么?对于应用程序的特定用户?谢谢目前,这些设置仅绑定到应用程序的实例。因此,如果该应用程序在仪表板上共享,所有用户都将具有相同的设置。如果你有两个相同的应用程序,每个应用程序都将有不同的设置。此外,这些设置在应用程序不在Rally内托管的情况下将不起作用。因此,如果您使用的是本地文件,那么测试它可能会很痛苦。