【问题标题】:Ember - Update model on save not as user typesEmber - 在保存时更新模型而不是用户类型
【发布时间】:2014-02-27 14:19:32
【问题描述】:

我正在使用 Ember App Kit 和 Ember Data 创建一个应用程序。我有一个项目资源,它同时具有创建和编辑表单。由于各种设计原因,我不想在用户点击保存按钮之前更新或创建模型。我不确定在 Ember 中执行此操作的最佳设计模式,因为默认是将表单字段绑定到模型,该模型会在输入数据时对其进行更新。

【问题讨论】:

  • 事实上,如果使用 Ember Data,我发现了另一种解决方案。我了解到模型上有一个rollback 方法,可以让您回滚未保存的模型数据。使用模型上的isDirty 属性,您可以检查willTransition 以查看模型是否有更改,与用户确认他们想要放弃这些更改,如果是,则使用内置方法回滚它们。非常干净,并且大大减少了所需的代码。

标签: ember.js ember-data ember-app-kit


【解决方案1】:

您需要在控制器上创建一个临时属性。

App.FooController = Em.ObjectController.extend({
    userName: '',

    createData: function() {
        this.get('store').createRecord({
            name: this.get('userName')
        }).save();

        this.set('userName', '');
    },

    saveData: function() {
        this.set('model.name', this.get('userName'));
        this.set('userName', '');
    }
});

绑定到文本字段(或其他)的userName 属性,然后在用户单击保存按钮时传递该值。

【讨论】:

  • 这很有意义!由于编辑和创建控制器将具有相同的字段并且表单正在使用部分,您是否建议使用要在控制器上设置的属性创建一个 mixin?感谢您的解决方案,简单但效果很好。
  • 我通常只在一个地方编辑数据,所以我从来没有为此创建过 mixin。但是,如果我要在多个地方编辑相同类型的对象,我肯定会尝试将其纳入某种可重用的功能中。如果模板始终相同,我会选择视图或组件。如果模板发生变化,mixin 会很好地工作。
  • 你知道在 Ember 中实现资源编辑和创建的最佳设计模式吗,因为它们的功能基本相同,只是结果略有不同?也许已经有一些文献可以指向我(在深入研究之前我尝试了快速搜索)。感谢您抽出宝贵时间对此做出回应,这真的很有帮助。
  • 我不知道任何特定的模式,但有一种方法可以使它更容易。 createRecord 函数采用属性和值的散列,您可以将其传递给现有模型上的setProperties。您可以将该哈希用作常用功能,并根据调用 createRecordsaveProperties 的不同来设置您的函数。
【解决方案2】:

或者,您可以创建一个Ember.Object,将模型属性复制到其中,然后将表单绑定到该对象。然后在保存时将属性复制回模型。您可能可以通过这种方式保存一些代码。

【讨论】:

  • 对,所以相同的主体,但使用 Ember 对象而不是直接在控制器上将它们作为属性。
  • 是的,然后你就有了一个可重用的函数来从模型属性创建对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 2015-03-14
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2017-04-07
  • 2014-12-24
相关资源
最近更新 更多