我有一个编辑表单,我希望禁用“保存”按钮,直到对绑定到输入或选择元素的其中一个属性进行编辑。
但是,如果用户将文本编辑回原始值,则表单不应再被视为脏。
示例:
我看到this帖子描述了如何创建dirtyBindingBehavior,但它只将新值与之前的值进行比较 - 在这种情况下,上面的第3行将导致仍然将表单列为Dirty,因为它将“测试2”的旧值与“测试”的新值进行比较。
关于如何实现这一目标的任何想法?
答案 0 :(得分:5)
您只需复制该对象并创建一个getter属性,将旧对象与新对象进行比较(使用@computedFrom
以避免脏检查)。例如:
import {computedFrom} from 'aurelia-framework';
export class App {
oldModel = new Model();
newModel = deepClone(this.oldModel);
@computedFrom('newModel.name', 'newModel.surname')
get hasChanged() {
return !isEqual(this.oldModel, this.newModel);
}
}
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));;
//use Object.assign({}, obj) if you don't need a deep clone
}
function isEqual(obj1, obj2) {
return JSON.stringify(obj1) === JSON.stringify(obj2);
}
class Model {
//something from database;
name = 'John';
surname = 'Doe';
}