Dojo Dgrid内联编辑保存另一行

时间:2014-05-29 08:48:59

标签: javascript json dojo editor dgrid

我有一个包含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()函数,因为它给了我错误。

谢谢!

1 个答案:

答案 0 :(得分:0)

为了让网格根据商店更改自动更新行,通常需要做两件事:

  • 商店需要可观察
  • 商店需要有一个查询引擎,以便Observable知道商品所属的位置
默认情况下,

JsonRest不包含queryEngine,因为查询引擎通常需要知道在JsonRest的情况下依赖于服务器行为的信息。但是,在简单的情况下,无论如何都可以使用dojo/store/util/SimpleQueryEngine(默认情况下是Memory使用的)。

所以你最终得到的结果是:

var store = new Observable(new JsonRest({
    target: '...',
    queryEngine: SimpleQueryEngine
}));

如果你需要强制重新渲染其他行,你可以通过手动调用store.putstore.notify来实现这一点(前者如果你真的想将它发送回服务器,那么如果您只是想在UI中更新它,那么通常会使用notify来允许客户端响应进一步的服务器更新。