3

我在 Ember.js 中创建了一个简单的控制器,其目的是将一个人添加到商店,使用 REST 适配器将其保存到服务器并获取 ID 并使用 ID 更新行。

我的代码如下所示:

App.AddPersonController = Ember.ObjectController.extend({
  newRecord: function() {
       currentRecord = App.Person.createRecord({name: "Abraham"});
       this.set('content', currentRecord );
  }
  save : function() {
      var result = this.get('store').commit();
      this.transitionToRoute('people.list');
      return result;
  }
});

我调用 newRecord() 并用 Abraham 创建了新记录。接下来,我允许用户编辑名称。在他推动保存后,我以这种方式从模板调用保存函数:

{{action save on="submit"}}

新记录作为一行正确保存到数据库中。用户被重定向到人员列表。但突然间,在人名单上,亚伯拉罕似乎是重复的。

我调查了商店,有两行具有相同的数据和相同的 ID。用户名不同。在数据库中只有一行。

那么在这种情况下如何防止 Ember.js 重复添加的行呢?

4

2 回答 2

3

由于您正在寻找详细的规范答案,我将假设您想要做“The Ember Way”的事情。

假设这是您的Person模型:

App.Person = DS.Model.extend({
  firstName : DS.attr('string'),
  lastName  : DS.attr('string')
});

通常你会想使用你的model钩子Route来为你的控制器设置内容。

App.AddPersonRoute = Ember.Route.extend({
  model : function(){
    return this.store.createRecord('person',{
      firstName : 'fake', 
      lastName : 'name'
    });
  }
});

然后在你的Controller你可以只检索content对象,调用save,然后转换到你想去的地方。

App.AddPersonController = Ember.ObjectController.extend({
  actions : {
    save : function(){
      this.get('model').save();
      this.transitionToRoute('index');
    }
  }
});

这是一个 JSBin,它使用以下方法展示了这一点:http FixtureController: //jsbin.com/ucanam/1201/edit

于 2013-09-27T04:03:20.967 回答
1

因为唱片从来不在商店里。您实际上应该在执行此操作时遇到错误。

创建新记录的正确方法是

currentRecord = this.store.createRecord('person');

然后保存该记录:

currentRecord.save();
于 2013-09-26T16:46:49.767 回答