0

我正在与 Breezejs 合作。假设我有一个dummy填充了一些数据的可观察实体。用户description通过html页面上的输入框修改了这个实体的属性。用户可能还在页面上的其他输入框中修改了此实体的其他属性。我的实体的 entityState 就是Modified此时。接下来我执行一些检查,只需要通过代码撤消对此description属性的修改。

如果这是唯一的修改,那么我想让我的 entityState 成为Unchanged

如果对此实体有其他修改,那么我想保持原样并仅撤消description属性。

为什么我需要那个?当页面上有一些未决的修改时,我会显示SaveCancel按钮。如果只有 1 处修改并且我撤消了它,那么启用按钮是不合逻辑的SaveCancel

可能吗?

谢谢。


更新

这是我的实际实现:

private tryReject() {
    // if any modified values are the same as original values >> reject
    var rejectPossible = true;
    for (var name in this.dummy().entityAspect.originalValues) {
        var oldVal = this.dummy().entityAspect.originalValues[name];
        var newVal = this.dummy()[name]();
        if (oldVal != newVal) rejectPossible = false;
    }
    if (rejectPossible) this.dummy().entityAspect.rejectChanges();
}

也许有一种聪明或更干净的方法?

4

1 回答 1

2

Breeze 中的每个实体都有一个带有“originalValues”映射的“entityAspect”属性。因此,对于任何实体,您都可以查看 originalValues 映射并撤消一个属性或全部撤消它们。像这样的东西(未经测试)。

var originalValues = myEntity.entityAspect.originalValues;
if (originalValues.hasOwnProperty("description") {
    if (Object.keys(originalValues).length === 1) {
      // this is the only change - so just reject everything - state will become "Unchanged" as a result.
      myEntity.entityAspect.rejectChanges();
    } else {
      // else just reverse this single property
      myEntity.setProperty("description", originalValues["description"]);
    }
}

希望这可以帮助!

于 2013-10-29T17:06:05.303 回答