如何添加 read/write customRestService 以支持在 Dojo DataGrid 中进行编辑?

How to add a read/write customRestService to support editing in Dojo DataGrid?

我正在尝试开发一个 Dojo DataGrid,它 returns 来自分类的 BidsByDriver 视图的用户文档,并允许他们编辑网格中的优先级字段。在克服了使用 keys 属性 过滤 categoryFilter 的障碍后,使用 xe:viewFileItemService read/write 服务很容易设置。然而,xe:viewFileItemService 作为数据源的问题在于,在网格中显示用户文档后,它会为视图中的每个条目显示空行。

为了绕过空白行,我沿着创建 xe:customRestService 的路径前进,它只返回当前用户文档的 jasonData。这解决了我的空白行问题,但我的数据源格式不正确 read/write 以支持网格内编辑。

这是从 xe:customRestService ...

返回的结果 Json 数据
[{"Driver":"ddd","BidID":"123","Priority":"1","Trip":"644"},
 {"Driver":"ddd","BidID":"123","Priority":"2","Trip":"444"},
 {"Driver":"ddd","BidID":"123","Priority":"4","Trip":"344"},
 {"Driver":"ddd","BidID":"123","Priority":"4","Trip":"643"}
]

这是我正在加载的 Dojo 模块:

<xp:this.resources>
    <xp:dojoModule name="dojo.store.JsonRest"></xp:dojoModule>
    <xp:dojoModule name="dojo.data.ObjectStore"></xp:dojoModule>
</xp:this.resources>

下面是为网格开发数据存储的脚本:

<xp:scriptBlock id="scriptBlock2">
      <xp:this.value><![CDATA[
    var jsonStore = new dojo.store.JsonRest({target: "InGridCustom.xsp/pathinfo"});  
    var dataStore = dojo.data.ObjectStore({objectStore: jsonStore});
  ]]></xp:this.value>
</xp:scriptBlock>

除了提供网格内编辑支持之外,所有这些都非常好用。任何想法表示赞赏。

更新的答案:

我会尝试其中一种或两种方法来解决您的问题。

1) 在您的视图中有一个类别,使用 categoryFilter 并使用 hack 使服务仅 return 正确的值。本题提纲:XPages Dojo Grid editable cell does not save value when REST Service save() method is called

2) 结合#1将rest服务类型改为viewJsonService。如果出现错误,请仔细检查 Per 提到的配置文档。还要注意 Per 在与配置和使用 Firebug 相关的链接问题中的评论,以确保使用正确的方法。更新必须是 PUT,POST 不能与 viewJsonService 一起使用。


原始答案(评论上下文)

保罗,

我相信您需要一个带有代码的按钮来保存更改。也许你知道,但你没有提到它,它也不在你的屏幕截图中。 Per 提到的步骤是非常必要的,所以您处理好它是件好事。该按钮是必需的,以 'commit' 更改回来。内联编辑行为不会触发 PUT 调用。如果您考虑一下,您不会希望在每次更改后更新一次,而是希望在用户完成编辑后更新一次。

如果你今天晚上还不明白,我有工作代码可以发给你,但在工作中无法访问。

您打算如何保存更改?使用自定义 REST 服务,我不希望保存数据存储会对后端数据进行任何更改,这就是刷新会将其恢复为原始值的原因。

我希望您需要在自定义 REST 服务中编写一个 doPost 方法来处理服务器端的更改,以及调用 post 方法并传入的客户端代码要处理的更新(连同文档 ID)。