如何通过get / post(无关紧要)打开一个包含给定参数的新窗口而不会被阻止?

时间:2012-09-09 02:38:34

标签: extjs extjs4.1

请注意此问题仅与ExtJS相关,我知道如何对基本HTML执行相同操作。

我正在创建一个放在每个网格上的按钮,即“另存为excel”。很明显,我需要打开一个新窗口,我希望url将把我在网格上使用的过滤器(和排序)作为参数。

获取过滤器和排序并不难,我可以直接从商店获取它们,问题是我不知道如何打开窗口而不会被弹出窗口阻止程序阻止。 在html中,我应该使用目标为空白的表单,添加2个隐藏字段,其值为= filters数组和排序数组。然后,当您单击按钮时,将运行提交。这将打开一个传递给它的参数的新页面。

我不知道如何将我的按钮包含在一个不可见的形式(我总是使用form.Panel),特别是我注意到form.Panel没有任何目标属性,所以我不知道我可以在哪里设置_blank值。

另外,是否有可能在ExtJS中创建一个以target = _blank为值的按钮?很可能它应该通过A标签构建。

请注意,按钮actullay非常简单:

var excelPrint = Ext.create('Ext.Action', {
  cls: 'icon-excel',
  handler: function() {
    // TODO: Open a new window and filter it same as current grid, the filtered data is an xlsx
    alert("Funzionalità inattiva");
  }
});

所以基本上我目前没有代码。好吧,我已经建立了所有的网格,远程过滤等等但是为了构建这个目的它没用了

2 个答案:

答案 0 :(得分:3)

如果您想要发出GET请求,那么当然会有一个包含hreftarget属性的简单按钮/链接。这是一个小小的工作示例:

Ext.create('Ext.Button', {
    text: 'Click me',
    href: 'http://google.com',
    target: '_blank',
    renderTo: Ext.getBody()
});

href配置已记录但目标不是,但如果您查看source code(请参阅renderTpl和getTemplateArgs),您会看到它按预期工作。

如果你想要一个POST请求,那么你是正确的,在一个也支持target属性并且可以作为常规工作的FormPanel中包含你的按钮(或者对于你来说也更方便)如果将standardSubmit设置为true,则为form(同步请求,无XHR)。

请注意,如果您需要一个触发文件下载的操作,您实际上不需要打开一个新窗口(显式或通过target="blank"),您可以使用当前的浏览器窗口,浏览器才会启动下载文件(如果MIME类型合适),而不实际导航离开当前页面。

如果您还有其他问题,请与我们联系。

答案 1 :(得分:1)

这就是我所做的。我使用了一个普通的extjs窗口并使用了html配置选项,并在其中放置了一个iframe

Ext.Window({
//other config
html: String.format('<iframe id="report" src="rest/service/report?accountId={0}&caseId={1}" width="780" height="580" />', accountId, caseId)
});

解决了弹出窗口阻止程序问题,并且传递参数更加容易。