我有一个包含2列的dgrid:Name,Predecessor。 每行都有另一行作为前任,我将其设置为。行的顺序与此无关。 在前一列中,我从列表中选择另一行的名称作为前驱。 我的问题是,当我在将其设置为另一行的前任之后更改行的名称时,它不会自动更改为新名称(预计会有)。 当然,在手动刷新页面后,我会看到新名称。
如何在没有手动刷新页面的情况下手动更改所需单元格中行的名称,或者在执行save()后不使用grid.refresh()方法? 例如,在save()函数的回调中设置单元格中的值。
我正在使用dojo.store.JsonRest。我正在使用grid.save()方法将PUT请求发送到我的商店。疼痛是一个PHP页面,它重新回应了JSON中的笑容。
我的网格看起来像这样:
<table id="myGrid" data-dojo-props="query:{param: 'value'}">
<tr>
<th data-dgrid-column="editor({field:'name',id:'name',width:175,sortable:false, unhidable:true,formatter:'do_highlight',editor:TextBox,editOn:'dblclick'})">Name</th>
<th data-dgrid-column="{field:'predecesors', id:'predecesors', width:175, sortable:false,renderCell:milestones.render_predecessor}">Predecessor</th>
</tr>
</table>
我在“dgrid-datachange”事件中调用的保存函数如下所示:
this.end_edit = function(event){
var item = event.grid.store.get(event.cell.row.id);
item.__edited_field = event.cell.column.field;
event.grid.updateDirty(event.cell.row.id, field, new_value);
var def = event.grid.save();
def.then(null, ajax.show_error);
}
如果有人知道如何更新该特定细胞,我将非常感激。我想避免使用refresh()函数,因为它给了我错误。
谢谢!
答案 0 :(得分:0)
为了让网格根据商店更改自动更新行,通常需要做两件事:
Observable
知道商品所属的位置 JsonRest
不包含queryEngine
,因为查询引擎通常需要知道在JsonRest
的情况下依赖于服务器行为的信息。但是,在简单的情况下,无论如何都可以使用dojo/store/util/SimpleQueryEngine
(默认情况下是Memory使用的)。
所以你最终得到的结果是:
var store = new Observable(new JsonRest({
target: '...',
queryEngine: SimpleQueryEngine
}));
如果你需要强制重新渲染其他行,你可以通过手动调用store.put
或store.notify
来实现这一点(前者如果你真的想将它发送回服务器,那么如果您只是想在UI中更新它,那么通常会使用notify来允许客户端响应进一步的服务器更新。