如何在ember中创建新记录

时间:2014-07-23 16:08:14

标签: javascript ember.js ember-data

应该很容易的东西,但我无法弄明白。如何设置路由器,控制器和模板来处理添加记录,从服务器报告错误?

我尝试了几件事,最新设置路由器,以便/users/new加载正确的模板和控制器:

App.Router.map(function() {
    this.resource('users', function() {
        this.route('new')
    });
});

模板是:

<form {{action 'submit' on='submit'}}>
  <div class="form-group">
    <label for="name">Name</label>
    {{input id='name' placeholder='Enter user name' class='form-control' value=name}}
  </div>
  <button type="submit" class="btn btn-default">Save</button>
</form>
<div class="error">
  {{errors.content}}
</div>

在提交时,控制器会创建一个新记录并将其保存:

App.UserNewController = Ember.ObjectController.extend({
    actions: {
        submit: function() {
            var user = this.store.createRecord('user', {name: this.get('name')});
            user.save();
        }
    }
});

模板显示正常,如果我尝试使用无效数据保存(缺少名称),我会从服务器收到400错误,报告需要“名称”。根据文档,此错误附加到model.errors,并在firefox中检查它显示这种情况,但它没有显示在模板中。我做错了什么?

第二个问题是,如果输入名称,则不会将其添加到记录中。实际上,this.get('name')会返回undefined。 AFAIK我正在做的一切都很正确,但显然我有些缺失。

我的另一个问题是,如果我搞砸了几次,并且在没有输入有效数据的情况下单击“保存”,则ember每次都会创建一个新的空白记录。我在正确的地方打电话给createRecord,还是有更好的方法来解决它?

1 个答案:

答案 0 :(得分:0)

引起我注意的第一件事是控制器:

它应该是UsersNewController而不是UserNewController(请注意用户之后的s。)

其余对我来说很好看。我把你的代码带到了jsbin,它起作用了:http://emberjs.jsbin.com/wohob/1/edit