【问题标题】:How to add a read/write customRestService to support editing in Dojo DataGrid?如何添加读/写 customRestService 以支持在 Dojo DataGrid 中进行编辑?
【发布时间】:2015-05-29 04:05:49
【问题描述】:

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

为了绕过空白行,我创建了一个 xe:customRestService,它只为当前用户的文档返回 jasonData。这解决了我的空行问题,但我的数据源的读/写格式不正确,无法支持网格内编辑。

这是从 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>

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

【问题讨论】:

  • Paul,您是否为您的网站启用了 HTTP PUT?这个答案有帮助吗? stackoverflow.com/a/20383456/785061
  • 启用 HTTP PUT 后,PATCH n DELETE 仍然没有区别......我的 custonRestService 仍然不支持网格内编辑

标签: javascript json rest xpages dojox.grid.datagrid


【解决方案1】:

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

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

【讨论】:

  • 我怀疑你走在正确的轨道上,但我不得不为此“离开网格”......考虑到使用 dataView 控件来做这件事是多么容易,这不值得痛苦。
【解决方案2】:

更新答案:

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

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

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


原始答案(针对 cme​​ts 的上下文)

保罗,

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

如果您今天晚上还没有弄清楚,我可以将工作代码发送给您,但在工作中无法访问。

【讨论】:

  • 我没有显示代码,但我确实有一个按钮来保存其余服务中的更改并刷新网格。我的问题是,在一行中更改了 Priority 字段,然后移动到下一行后,我在上一行中所做的更改丢失并返回到其原始值。我认为这是因为我的 customRestService 生成的数据源格式不正确,无法支持写入操作。
  • 您是否尝试了 viewJSONService 而不是使用 viewItemFileService 或 customRestService?我最终让它工作了。也可以尝试联系 Brad B,他曾经是 DojoGrid 先生。我有一段时间没在 SO 上看到他了。
  • 是的,试过了。 viewJsonService 也会返回如上图所示的空白行,并且在启用网格内编辑时会产生错误。
  • 我记得类似的挣扎,在我得到它之前,我的头在我的桌子上敲了好几天。今晚我将深入研究我的代码,看看是否能找到解决方案。如果可以,我会更新问题。我还将在电子邮件中向您拍摄所有代码。我想我可以在 TLCC 网站上找到它,或者我会在推特上给你发私信。
猜你喜欢
  • 1970-01-01
  • 2013-07-30
  • 2012-09-03
  • 2019-12-24
  • 2011-08-07
  • 1970-01-01
  • 2014-04-10
  • 2013-07-08
  • 1970-01-01
相关资源
最近更新 更多