1

我正在尝试找到一种方法来更新模型的单个属性而不会变脏。就像Store.load但只有一个属性。

用例是我想上传一个头像图像(这不能用当前适配器的语义 AFAIK 来完成)。我针对特定的 API 端点执行此操作,然后我想使用生成的 URL 更新用户(因此他的所有头像外观都会更新)。

我在配置文件版本的上下文中,所以如果我只加载整个用户,我会丢失表单的所有更改(因为值被覆盖)。

有什么办法吗?谢谢!

4

2 回答 2

1

您可以单独为“阿凡达”建模,将其作为模型本身而不是属性。然后,可以通过 store 更新该模型,而不必担心与 User 模型的其余部分发生冲突的更改。

于 2013-02-28T20:51:42.867 回答
0

我可以想到两种方法,但我没有尝试过。(它们都只是解决方法)

您可以设置不是 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');

第二种方法虽然是一个丑陋的黑客。

于 2013-02-28T18:34:35.717 回答