我正在尝试找到一种方法来更新模型的单个属性而不会变脏。就像Store.load
但只有一个属性。
用例是我想上传一个头像图像(这不能用当前适配器的语义 AFAIK 来完成)。我针对特定的 API 端点执行此操作,然后我想使用生成的 URL 更新用户(因此他的所有头像外观都会更新)。
我在配置文件版本的上下文中,所以如果我只加载整个用户,我会丢失表单的所有更改(因为值被覆盖)。
有什么办法吗?谢谢!
我正在尝试找到一种方法来更新模型的单个属性而不会变脏。就像Store.load
但只有一个属性。
用例是我想上传一个头像图像(这不能用当前适配器的语义 AFAIK 来完成)。我针对特定的 API 端点执行此操作,然后我想使用生成的 URL 更新用户(因此他的所有头像外观都会更新)。
我在配置文件版本的上下文中,所以如果我只加载整个用户,我会丢失表单的所有更改(因为值被覆盖)。
有什么办法吗?谢谢!
您可以单独为“阿凡达”建模,将其作为模型本身而不是属性。然后,可以通过 store 更新该模型,而不必担心与 User 模型的其余部分发生冲突的更改。
我可以想到两种方法,但我没有尝试过。(它们都只是解决方法)
您可以设置不是 DS.attr 的用户属性。如果它是一个正常的财产,它不应该弄脏记录。
如果 url 是数据库属性,则创建一个侦听 URL 的计算属性并在模板中使用它。
App.User = Em.extend({
url: DS.attr('string'),
URL: function() {
return this.get('url');
}.property('url')
});
进而user.set('URL', imageUrl)
另一种方法可能是将记录转换为clean
状态。
user.get('stateManager').send('becameClean');
第二种方法虽然是一个丑陋的黑客。