【问题标题】:ember.js discard created model if not saving如果不保存,ember.js 会丢弃创建的模型
【发布时间】:2014-06-17 10:38:59
【问题描述】:

我已经按照教程here 的三个部分进行了操作,一切正常,只有一个例外。当我转到“添加图书”页面,然后导航到“列出图书”而不保存时,图书列表会被一个空项目扩展。我怀疑原因是以下代码,其中新模型是在保存之前创建的,如果不保存表单则不会删除。任何想法如何解决这个问题?

Embertest.BooksNewRoute = Ember.Route.extend({
  model: function() {
    return this.get('store').createRecord('book');
  },
  actions: {
    create: function() {
      var newBook = this.get('currentModel');
      newBook.save();
      this.transitionTo('books');
    }
  }
});

【问题讨论】:

    标签: javascript ruby-on-rails ember.js


    【解决方案1】:

    来自http://emberjs.com/api/classes/Ember.Route.html#method_deactivate

    在您的路线上添加deactivate 函数。这是在退出当前路由之前调用的。所以你可以像这样回滚你刚刚在模型中创建的记录:

    model: function(params) {
        return this.get('store').createRecord('book');
    },
    
    deactivate: function() {
        this.currentModel.rollback();
    },
    

    【讨论】:

    • 这对我不起作用 - 如果我离开页面,则不会调用 deactivate。
    • 你确定你把它放在路由里了吗?
    • 是的。我猜它不起作用,因为由于嵌套资源(即 /posts/new -> /posts),当我导航离开时,我有点停留在同一条路线上。
    • 那么你可以在 /posts/new.js 路由中添加上面的代码。这对我来说很有效。
    【解决方案2】:

    我通过将销毁记录的操作附加到 willTransition 事件来解决这个问题,如下所示。如果这是正确的方法,有人会发表评论吗?

    Embertest.BooksNewRoute = Ember.Route.extend({
      model: function() {
        return this.get('store').createRecord('book');
      },
      actions: {
        willTransition: function() {
          if (this.currentModel.get('isNew')) {
              this.get('currentModel').deleteRecord();
          };  
        },
        create: function() {
          var newBook = this.get('currentModel');
          newBook.save();
          this.transitionTo('books');
        }
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2015-02-16
      • 2010-09-23
      • 2020-06-25
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多