Javascript 如何添加读/写customRestService以支持Dojo DataGrid中的编辑?

Javascript 如何添加读/写customRestService以支持Dojo DataGrid中的编辑?,javascript,json,rest,xpages,dojox.grid.datagrid,Javascript,Json,Rest,Xpages,Dojox.grid.datagrid,我正在尝试开发一个DojoDataGrid,它从分类的BidsByDriver视图返回用户的文档,并允许用户编辑网格中的优先级字段。在克服了使用keys属性对categoryFilter进行过滤的障碍后,使用xe:viewFileItemService读/写服务就可以轻松地设置。但是,xe:viewFileItemService作为数据源的问题是,在网格中显示用户文档后,它将为视图中的每个条目显示空行 为了绕过空白行,我创建了一个XE:CuestRestService的路径,它返回了Jason

我正在尝试开发一个DojoDataGrid,它从分类的BidsByDriver视图返回用户的文档,并允许用户编辑网格中的优先级字段。在克服了使用keys属性对categoryFilter进行过滤的障碍后,使用xe:viewFileItemService读/写服务就可以轻松地设置。但是,xe:viewFileItemService作为数据源的问题是,在网格中显示用户文档后,它将为视图中的每个条目显示空行

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

下面是从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>

除了提供网格内编辑支持的bit之外,所有这些都非常有效。欢迎提出任何想法。

更新答案:

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

1) 在视图中有一个类别,并使用categoryFilter和hack使服务只返回正确的值。在这个问题上:

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


原始答案(用于评论的上下文)

保罗

我认为您需要一个带有代码的按钮来保存更改。也许你会,但你没有提到它,它也不在你的屏幕截图中。Per提到的步骤是非常必要的,因此,您已经处理好了这一步骤是很好的。按钮是必要的,用于“提交”更改。内联编辑操作不会触发PUT调用。如果您仔细想想,您不希望每次更改后都进行更新,而是希望在用户完成编辑后进行一次更新


如果你今晚还没弄明白,我有可以发送给你的工作代码,但在工作中无法访问

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


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

Paul,您是否为网站启用了HTTP PUT?这个答案有用吗?启用HTTP PUT后,补丁n DELETE仍然没有区别。。。我的custonRestService仍然不支持网格编辑我没有显示代码,但我有一个按钮来保存rest服务中的更改并刷新网格。我的问题是,在更改一行中的优先级字段,然后移动到下一行后,我在前一行中所做的更改将丢失并返回到其原始值。我认为这是因为我的customRestService生成的数据源格式不正确,无法支持写入操作。您是否尝试了viewJSONService而不是使用viewItemFileService或customRestService?我终于让它起作用了。也可以试着联系布拉德B,他曾经是多吉格利德先生。我有一段时间没看到他穿这样的衣服了。是的,我试过了。VIEWJSONService还将返回空白行,如上面所示的图像,当使用网格编辑时,它会产生错误。我记得类似的斗争,在我得到它之前几天我的头撞在桌子上。今晚我将深入研究我的代码,看看是否能找到解决方案。如果可以,我将更新问题。我还将在一封电子邮件中向您发送所有代码。我想我可以在TLCC网站上找到它,或者我会在twitter上给你发送一个PM。我怀疑你的思路是对的,但我不得不为这一个“离开网格”。。。考虑到用dataView控件来实现这一点是多么容易,不值得为此付出痛苦。