我有文件清单。每个文档都有 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的创作者"建议/建议/最佳实践"处理这个。是否有一些基本的方法/手动解决方案,不需要任何第三方插件?与模型中的每个关系的onchangechangever一样,或者与子模型相关的@ each.dirtyType的计算属性(甚至设置子项不会被标记为脏本身?)?
在Ember 2.13中,什么是沙盒解决方案?
答案 0 :(得分:0)
已经有一段时间了。对于has-many,我使用这个解决方案。如果用户更改与以前相同的项目组有多个关系,'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);
}
}),
答案 1 :(得分:0)
Ember(2.x)不跟踪关系(例如hasMany),但可以使用几乎可以执行它的ember-addon ember-data-change-tracker。它允许您(自动)保存当前的关系状态,然后您可以比较这个已保存的' (=旧州)与当前状态。你必须自己找到差异。我的适配器的一个简单示例:
snapshot.hasMany('users').length <-- current count of relations
snapshot.record.savedTrackerValue('users').length <-- old count of relations