我正在和Breezejs合作。让我们说我有一个可观察的实体dummy
充满了一些数据。用户通过html页面上的输入框修改了此实体的description
属性。用户还可能在页面上的其他输入框上修改了该实体的其他属性。我的实体的entityState目前是Modified
。接下来,我执行一些检查,并且需要通过代码撤消仅对此description
属性进行修改。
如果这是唯一的修改,那么我希望我的entityState成为Unchanged
如果此实体还有其他修改,那么我希望按原样保留它们,并且仅撤消 description
属性。
为什么我需要它?当页面上有一些待处理的修改时,我会显示Save
和Cancel
按钮。如果只有1个修改并且我将其撤消,则启用Save
和Cancel
按钮不是逻辑。
有可能吗?
感谢。
更新
这是我的实际实施:
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();
}
也许有一种聪明或更干净的做法?
答案 0 :(得分:2)
Breeze中的每个实体都有一个“entityAspect”属性,带有“originalValues”地图。因此,对于任何实体,您都可以查看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"]);
}
}
希望这有帮助!