2015-04-01 64 views
1

我试图实现的:用户去发布/ 3 /编辑。这里表单绑定到模型,所以它已经填写完毕。并在顶部Ember js与关系克隆记录

You are editing the post {{model.title}} 

如果用户更改标题它动态变化。我不想要这种行为。如果用户已经点击了“保存”按钮(并且服务器端的所有内容都正确),我想将更改应用到记录中。

我的想法:

  1. 克隆记录
  2. 结合克隆记录形式
  3. 后,点击“保存”的克隆(或修改)记录的属性应用到原始记录。

问题

  • 这是这样做的正确方法?
  • 有没有像record.clone()这样的东西,可以深度复制记录与它的关系
  • 有没有办法应用更改,如originalRecord.apply(clonedRecord)

回答

0

假设你正在使用灰烬数据:

更简单的方法可能是使用setupController钩在您的文章编辑路线:

// routes/posts/edit.js 
export default Ember.Route.extend({ 
    setupController: function (controller, model) { 
    this._super(controller, model); 
    this.controller.set('staticTitle', model.get('title')); 
    } 
}); 
在你的模板

则:

{{staticTitle}} 

然后当您提交表单时,成功保存后将静态标题重置为新值:

// controllers/posts/edit.js 
. 
. 
. 
actions: { 
    savePost: function() { 
    var controller = this; 
    var post = this.get('model'); 
    function onSuccess(savedPost) { 
     controller.set('staticTitle', savedPost.get('title'); 
     //transition somewhere 
    } 
    function onFailure() { 
     post.rollback() 
    } 
    post.save().then(onSuccess, onFailure); 
    } 
} 
+0

谢谢,但“标题”只是一个例子。想象一下模式下的编辑形式,以及模式下的“背景”中的帖子列表。偶尔你可以看到帖子改变的所有属性。这就是为什么我需要更通用的方式来克隆记录。要将它们逐一设置,可能会非常繁琐,每个包含超过10个属性的50个模型。 – user3568719 2015-04-01 12:43:09

+0

啊好的,那么在这种情况下,我认为你想https://github.com/yapplabs/ember-buffered-proxy – 2015-04-01 16:11:28

+0

看起来很有希望,我会看看它。谢谢 – user3568719 2015-04-01 17:46:05