【问题标题】:Update/modify object retrieved from dojo datastore/JsonRestStore更新/修改从 dojo 数据存储/JsonRestStore 检索的对象
【发布时间】:2012-03-22 06:06:28
【问题描述】:

我正在使用 DOJO JsonRestStore。我修改对象中的字段。

将修改后的对象持久化回数据存储和 REST 服务的正确过程是什么?

更新:删除了有关网格的信息,因为它不是问题的一部分。

【问题讨论】:

    标签: javascript rest dojo


    【解决方案1】:

    通常情况下,一个 store.save() 就足够了...如果不是,则意味着您的网格和存储之间存在问题。

    【讨论】:

    • 您对某些错误的看法可能是正确的。我使用 fetchitembyid() 获取了一个项目,对其进行了修改,调用了 store.save() 并且它没有持续返回到服务中。修改对象后 isDirty() 为 false。
    【解决方案2】:

    显然,我假设返回的项目将与数据存储同步。它没有出现,必须使用手动更新:

    store.setValue(item, field, value);
    

    我也希望有一个相当于 JPA 合并的命令。如果您使用以下内容覆盖先前的对象:

    store.newItem( updatedVersionOfItem );
    

    并且item具有相同的唯一id,它会覆盖旧的item,类似于merge。

    有谁知道是否有某种工厂会为每个字段调用 store.setValue() 的项目创建 getter 和 setter?

    我想它会是这样的:

    var wrappedItem = itemWrapperFactory.createWrapper( item, store );
    ...
    //Some where in createWrapper(...), this is just the concept
    for (var itemField in itemFieldList)
    this.__defineGetter__( itemField[index] , function(val){
        store.setValue(item, itemField[index], val);      
    });
    

    我正在考虑将自己的代码写成一个整洁的架构。

    【讨论】:

    • 如果您使用 dojox.data.JsonRestore 和 dojox.grid.DataGrid,如果您已将网格属性“store”设置为您的 JRS,并将您的单元格设置为可编辑.. . 当您从网格更新属性时,更改肯定应该反映到商店...您之间还有其他东西吗?
    • 对。我没有从网格中更新它们,我只是使用从网格中获得的信息来检索它们。这是我的问题的根源之一。
    猜你喜欢
    • 2012-02-14
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多