您是否看到任何方法来知道何时通过绑定修改了任何模型的属性? 我需要通用的东西,因为它将应用于所有形式的应用程序。这意味着我不能仅对模型的每个属性都有一个“ property” Changed()可观察的回调。我正在考虑重写绑定引擎创建的属性设置器的方法,以便它们可以调用单个已定义的回调,但是我觉得有更好的方法。
答案 0 :(得分:1)
我为这种情况(以及更多)创建了aurelia插件。
它不完全是您的要求,但可以为您提供很多帮助。
因为该插件将创建一个名为isDirty
的属性,您可以观察并相应地激发代码。
https://github.com/avrahamcool/aleph1-aurelia-utilities
查看Dirty Tracking a model:
部分
您的模型类需要扩展插件提供的baseClass。 现在,您可以使用来装饰模型的任何属性 @dirtyTrack()装饰器。
对于babel用户:声明中的分配将设置 属性的默认值。对于TS用户:您应该致电 参数@dirtyTrack(7)的装饰器someInt:number;
这将在模型中设置一个isDirty变量。该属性将 跟踪的每一次更改都会自动更新为 属性。
在任何时候,您都可以在模型上调用saveChanges()来提交 当前的变化。或throwsChanges()还原为上一个保存的 点。您可以调用serialize()从模型中获取pojo对象, 或反序列化(pojo)以从pojo对象填充模型。
答案 1 :(得分:0)
好吧,我最终只是使用绑定引擎来观察所有属性更改。这使我无需修改现有模型即可实现isDirty检查。
所以最终代码如下:
Object.getOwnPropertyNames(obj).forEach(p => {
this.subscriptions.push(this.binding.propertyObserver(obj, p)
.subscribe(() => this.updateDirty()));
});
每次更改属性后都会调用我的 updateDirty()方法,并且无需对模型进行任何更改。
如果有人能提出更好的解决方案,我仍然很感兴趣,但这暂时满足了我的需求。