繁体   English   中英

如何在路线中使用空白的Ember Data模型?

[英]How to use a blank Ember Data model in a route?

我无法在以下内容中找到任何东西,对此可能有的任何帖子或指南将不胜感激!

我正在尝试使用表单和路由器创建新记录。 我要解决的方法是在路由器中设置模型,然后在用户通过操作提交表单时保存记录。

我看到了其他示例,其中作者在控制器中执行“ createRecord”并使用“ get”或“ getProperties”从表单中获取值。 但是,在下面的代码中,这似乎要简单得多:

Dashboard.CreateAccountRoute = Ember.Route.extend({
model: function() {
    return this.store.createRecord('account', {});
},
actions: {
    createAccount: function () {
        var account = this.modelFor('create_account');

        var self = this;
        account.save().then(function(account){
            self.flashMessage('The account was added successfully!', 'alert-success');
            self.transitionTo("accounts");
        }, function(reason) {
            self.flashMessage('There was an error saving the account. Please try again.', 'alert-error');
            console.log(reason);
        });
    }
}
});

当然,这样做的问题是,如果用户不提交表单,则记录仍会添加到本地存储中。 否则,它将用作表单中记录中的预期设置值。

在执行“ createAccount”操作之前,如何在不保存任何内容的情况下完成上述操作?

您可以使用路线的deactivate挂钩来回滚您的模型。 这是一个例子:

deactivate: function() {
  var model = this.get('controller.model');
  if (model != null) {
    model.rollback();
  }
}

您可以使用willTransition事件。 这是我们应用程序中的真实示例:

App.FlavorNewRoute = Ember.Route.extend({
  setupController: function(controller) {
    var game = this.modelFor('game');
    var newFlavor = this.store.createRecord('flavor', {
      name: '',
      blueprintName: game.get('blueprintName'),
      organizationId: game.get('organizationId'),
      isArchived: false,
      isLocked: false,
      entries: []
    });
    controller.set('content', newFlavor);
  },

  actions: {
    willTransition: function(transition) {
      var flavor = this.controller.get('content');
      if(flavor.get('isNew') && flavor.get('isDirty')) {
        flavor.destroyRecord();
      }
    }
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM