2

我正在尝试在 IBM Connections 4.0 中为 iWidget 实例保存一个持久变量

文档(链接链接)将我引导至以下 javascript(在编辑模式下使用 iWidget 运行):

this.iContext.getiWidgetAttributes().setItemValue("instance","helloWorld");
this.iContext.getiWidgetAttributes().save();  //or .commit(); as save is deprecated

我还尝试在小部件 XML 定义中定义变量:

<iw:itemSet id="attributes" private="false" onItemSetChanged="itemSetChanged">
    <iw:item id="instance" value="" readOnly="false"/>
</iw:itemSet>

这会在本地实例中正确设置该值,我还看到一个对服务器的 PUT 请求以保存该值。它返回一个 404 响应代码。网址是:

/connections/opensocial/common/repos?st=default%3AcQitETUij2Iqg0A_8mB9A35-pRKmnH_dFUgT4rY-hERIC3ZTNW3hp0OeLr_SYZ2mXWW6OjMtcFPijI_YaIaCDZlduzYgn5FkYQUTiqngHgLqsBMG&type=itemSet&pageId=undefined&widgetId=widget_d785df84b58d4d459707a048014567f6_1369275060798&itemSetId=attributes

当我重新加载页面并尝试使用以下方法再次检索它时,该值不再存储:

this.iContext.getiWidgetAttributes().getItemValue("instance");

我注意到 URL 中有一个“pageId=undefined”。Connections 服务器的 SystemOut.log 中没有输出。

目前它正在主页“我的小部件”页面中运行,但稍后也会在社区应用程序中运行。

谢谢

4

1 回答 1

1

对于遇到此问题的其他任何人,这是我发现的;

事实证明,通过主页保存无法正常工作,但是当通过社区机制加载小部件时,我确实成功保存了实例数据;

用于保存的 JavaScript(.save 调用回调函数,但不是必需的):

if(this.inCommunity)
{
    this.iContext.getiWidgetAttributes().setItemValue("instance",contentToSave);
    this.iContext.getiWidgetAttributes().save(dojo.hitch(this,this.dashboardSaved));
}

加载保存的数据:

this.instanceData = this.iContext.getiWidgetAttributes().getItemValue("instance");

小部件定义(在 widgets-config.xml 中)

<widgetDef defId="Dashboard" description="MyDash" modes="view edit" url="/Dashboard.xml" uniqueInstance="false">
    <itemSet>
        <item name="instance" value=""/>
    </itemSet>
</widgetDef>

仪表板.xml

<iw:iwidget xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget" iScope="Dashboard" supportedModes="view edit" mode="view" allowInstanceContent="true">
    <iw:resource uri="./dashboard.js"/>
    <iw:event id="view" handled="false" onEvent="onView"/>
    <iw:event id="edit" handled="false" onEvent="onEdit"/>
    <iw:event id="onRefreshNeeded" handled="true" onEvent="onRefresh"/>
    <iw:itemSet id="attributes" private="true" onItemSetChanged="itemSetChanged">
        <iw:item id="instance" readOnly="false"/>
    </iw:itemSet>
    <iw:content mode="view">
        <![CDATA[<div id="RootWidget"></div>]]>
    </iw:content>
    <iw:content mode="edit">
        <![CDATA[<div id="RootWidget"></div>]]>
    </iw:content>
</iw:iwidget>
于 2013-07-18T00:43:23.927 回答