Worklight Studio Rich Page Editor在页面加载时无法调用WL。*

时间:2013-09-24 23:43:12

标签: ibm-mobilefirst worklight-studio

我在OSX Lion上的64位Eclipse Juno中使用Worklight Studio 6.0.0.20130917-1749。

我发现如果我在一个jQueryMobile(1.3.1)pagebeforeshow处理程序中调用WL.Client.invokeProcedure(),甚至WL.Logger.debug(),它会导致富有的设计部分当我尝试切换到该页面时,页面编辑器挂起。

$("#myPage").on("pagebeforeshow", function(){WL.Logger.debug("loading myPage...");});

如果我在移动导航视图中双击myPage,则页面不会显示,我无法切换到应用程序中的任何其他页面,或者对设计窗格执行任何操作。刷新按钮没有修复它(它只是尝试加载相同的页面,我回到我开始的地方)我唯一能做的就是关闭html文件并重新打开它。

这似乎是由在RPE中运行的代码中缺少WL.StaticAppProperites的定义引起的。如果我在chrome下查看应用程序公共资源的html源代码,我会看到一个定义:

<script>
// Define WL namespace.
var WL = WL ? WL : {};
/**
 * WLClient configuration variables.
 * Values are injected by the deployer that packs the gadget.
 */
WL.StaticAppProps = {
   "APP_DISPLAY_NAME": "MyApp",
   "APP_ID": "MyApp",
   "APP_SERVICES_URL": "\/MyApp\/apps\/services\/",
   "APP_VERSION": "1.0",
   "ENVIRONMENT": "preview",
   "LOGIN_DISPLAY_TYPE": "popup",
   "LOGIN_POPUP_HEIGHT": 610,
   "LOGIN_POPUP_WIDTH": 920,
   "PREVIEW_ENVIRONMENT": "common",
   "WORKLIGHT_PLATFORM_VERSION": "6.0.0",
   "WORKLIGHT_ROOT_URL": "\/MyApp\/apps\/services\/api\/MyApp\/common\/"
};</script>

在生成的HTML中,各种环境都有类似的定义。但是看看weinre,我发现没有相应的脚本注入到RPE中显示的html中。缺少WL.StaticAppProperties的定义导致worklight.js中的代码在WL.Utils定义之前失败。

有没有办法让我添加WL.StaticAppProps = {}以便在注入加载worklight.js的代码之前出现这种情况?

此问题还有其他解决方法吗?

1 个答案:

答案 0 :(得分:1)

编辑器正在定义WL.StaticAppProps属性,但是它是在一个额外的注入.js文件中,而不是在运行页面中的内联脚本块中。该脚本在编辑器标记中的位置可能不正确,我们将对此进行调查。

然而,这里存在一个更大的问题,即编辑器中的页面无法调用Worklight服务器。由于编辑器始终需要独立于预览服务器是否已发布和启动而运行,因此它使用自己的机制将Web资源加载到“设计”窗格中。因此,原始服务器 Worklight开发服务器,并且尝试调用服务器端逻辑将无法应答。我相信这更可能是你看到的挂起情景的原因。

一般建议使用编辑器构建页面的UI标记,然后在UI完成后开始连接服务调用。此时预览应用程序应该转移到移动浏览器模拟器和/或本机设备测试。为了继续在编辑器中执行增量UI工作,您还可以添加一些临时条件逻辑,以便在进行设计工作时避免(或模拟)服务器调用,例如:

var designMode = true;   // switch to false for real server preview
if(!designMode) {
    // your service invocations here
}