Breeze 如果撤消实体中的唯一修改,则使我的entityState保持不变
我和Breezejs一起工作。假设我有一个可观察的实体Breeze 如果撤消实体中的唯一修改,则使我的entityState保持不变,breeze,Breeze,我和Breezejs一起工作。假设我有一个可观察的实体dummy填充了一些数据。用户通过html页面上的输入框修改了该实体的description属性。用户可能还修改了页面上其他输入框中此实体的其他属性。此时,我的实体的entityState已修改。接下来,我执行一些检查,只需按代码撤消对该属性的修改 如果这是唯一的修改,那么我希望我的entityState保持不变 如果此实体上有其他修改,则我希望保持原样,只撤消说明属性 我为什么需要它?当页面上有一些悬而未决的修改时,我会显示保存和取消按钮。
dummy
填充了一些数据。用户通过html页面上的输入框修改了该实体的description
属性。用户可能还修改了页面上其他输入框中此实体的其他属性。此时,我的实体的entityState已修改。接下来,我执行一些检查,只需按代码撤消对该属性的修改
如果这是唯一的修改,那么我希望我的entityState保持不变
如果此实体上有其他修改,则我希望保持原样,只撤消说明
属性
我为什么需要它?当页面上有一些悬而未决的修改时,我会显示保存
和取消
按钮。如果只有一个修改,我将其撤消,那么启用保存
和取消
按钮就不符合逻辑
可能吗
谢谢
更新 以下是我的实际实现:
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();
}
也许有一种更聪明或更干净的方法?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"]);
}
}