【问题标题】:Does view.postscript() allow you to call functions loaded as output scripts?view.postscript() 是否允许您调用作为输出脚本加载的函数?
【发布时间】:2013-08-23 17:40:23
【问题描述】:

我使用<xpScriptBlock> 来存储两个相当长的客户端函数的内容,这些函数加载一个ExtJS 网格。我可以使用客户端 javascript 调用函数就好了。

我发现我需要根据下划线文档中的条件显示不同的网格。为了引用后端,我将代码移动到服务器端,然后尝试使用 view.postScript 调用网格。这不起作用,是我提出问题的基础。

这种方法甚至可能吗?我不希望将所有代码都放入事件中。这些函数相当长,并且更好地保存在脚本块中以提高可读性和可维护性。这些函数肯定是在客户端中加载的,因为我可以使用 firebug 控制台手动加载它们。也许我错过了一些简单的东西,所以我想在改变我的方法之前先问一下。

var typePO = document1.getItemValueString("typePO");
if(typePO == "AFS"){
    view.postScript("loadGridAFS();")
} else {
    view.postScript("loadGridOther();")
}

此代码位于面板的服务器端 onClientLoad 事件中。我试过添加'return'关键字,它没有任何区别。

更新:我什至无法使用 view.postscript() 获得简单的警报。这个方法是不是只对SSJS中特定类型的事件有效???

【问题讨论】:

  • 你能定义“不工作”吗?浏览器控制台中是否显示错误?还是什么都没有发生?还是它运行了,但行为与预期不同?
  • 当然,蒂姆,网格应该在的页面上没有显示任何内容。 Firebug 没有报告任何错误。就好像代码根本不存在一样。
  • 我将代码从面板事件移动到 xpage afterPageLoad 事件,它完美运行。

标签: xpages


【解决方案1】:

在使用简单的警报进行一些实验后,我可以说 view.postScript() 并非在任何地方都有效。

为了测试,我将相同的代码放在 xpage 的六个事件中。这是我使用的代码示例:view.postScript("alert('onClientLoad');");我只是更改了消息以匹配事件。

结果如下:

  1. onClientLoad = 没有
  2. beforePageLoad = XSP 错误
  3. afterPageLoad = 工作!
  4. afterRestoreView = 没有
  5. beforeRenderResponse = 工作!
  6. afterRenderResponse = 没有

我还没有尝试过所有可用的事件,但这里的底线是你不应该指望 view.postscript() 可以在任何地方工作。如果它什么都不做,请先尝试一个简单的警报,以查看事件是否支持 view.postscript,然后再询问您尝试运行的客户端 JavaScript 代码。

【讨论】:

  • 当您考虑到生命周期的render_response 阶段将标记发送到浏览器时,如果在afterRenderResponse 期间运行任何旨在影响该标记的代码都将无效,这是有道理的:它是为时已晚。 beforePageLoad 太早了,因为组件树还不存在。不知道为什么它在其他事件中不起作用,但可能是出于类似的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
相关资源
最近更新 更多