如何在Ember 2.13.0中检测并保存关系变化?

Jir*_*son 5 ember.js ember-data ember.js-2

我有文件清单.每个文档都有belongsTo定义的客户端属性.

当用户在其中一个文档中更改客户端时,我想在计数器中显示更改了多少文档.当用户决定按"发布"按钮时,会将文档客户端更改保存到api.

ember 2.13中的DS.Model有参数(https://emberjs.com/api/data/classes/DS.Model.html):

hasDirtyAttributes,dirtyType

他们两个都没有通过Ember 设计belongsTo/HasMany的变化作出反应.我看到了很多关于这个主题的答案,但我没有在2.13文档中看到任何isDirty()方法,也没有看到任何.send("becomeDirty")方法来手动设置脏状态的文档模型?我还看到了几个旧版Ember版本的插件/ mixins.

但我的问题是,Ember创作者如何"建议/建议/最佳实践"来解决这个问题.是否有一些基本的方法/手动解决方案,不需要任何第三方插件?对于模型中的每个关系可能都是onchangechange observer,或者对于子相关模型使用@ each.dirtyType计算属性(或者甚至设置子项不会被标记为脏本身?)?

在Ember 2.13中,什么是沙箱解决方案?

Jir*_*son 0

已经有一段时间了。对于有很多我使用这个解决方案。如果用户更改与以前相同的项目组的多对关系,“isTasksDirty”将返回 false:

/* RELATIONS DIRTINESS */
    isRelationDirty: Ember.computed(
        'isDepartmentsDirty',
        'isTasksDirty'
        {
            get(key) {
                return this.get("isDepartmentsDirty") ||
                       this.get("isTasksDirty");
            },
            set(key, value) {
                this.set("isDepartmentsDirty", value);
                this.set("isTasksDirty", value);
            }
        }
    ),

    isTasksDirty:false,
    tasksChanged: Ember.observer('tasks.[]', function() {
        if(!arraysEqual(this.get("tasks").content.currentState, this.get("tasks").content.canonicalState)){
        this.set("isTasksDirty", true);
    } else {
        this.set("isTasksDirty", false);
    }
}),
Run Code Online (Sandbox Code Playgroud)