【问题标题】:Ember js cloning record with relationsEmber js克隆记录与关系
【发布时间】:2015-04-01 20:30:01
【问题描述】:

我试图实现的目标:用户去 post/3/edit。这里表单绑定到模型,所以它已经填写好了。并在顶部

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

如果用户更改标题,它会动态更改。我不想要这种行为。如果用户已经点击“保存”按钮(并且服务器端一切正常),我想将更改应用到记录。

我的想法:

  1. 克隆记录
  2. 将克隆记录绑定到表单
  3. 点击“保存”后,克隆(和编辑)记录的属性将应用于原始记录。

问题

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

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    假设您使用的是 Ember Data:

    一种更简单的方法可能是在您的帖子编辑路径中使用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);
      }
    }
    

    【讨论】:

    • 谢谢,但“title”只是一个例子。想象一下模态中的编辑表单,以及模态下“背景”中的帖子列表。有时您可以看到帖子的所有属性都在变化。这就是为什么我需要一些更通用的方法来克隆记录。对于 50 多个模型,每个模型具有 10 多个属性,一一设置它们可能非常繁琐。
    • 啊,好吧,在那种情况下,我想你想要github.com/yapplabs/ember-buffered-proxy
    • 看起来很有希望,我会看看它。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多