在ember.js中保存对象时出错:'对象X没有方法'保存''

时间:2013-11-21 02:24:23

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

我正在Rails和Ember.js中构建一个应用程序,但是我在创建新对象时遇到了麻烦。在我的ember控制器中,当调用保存操作时,它会尝试调用this.get('model').save()。实际对象只需要创建一个名为“content”的参数。我得到的错误是Uncaught TypeError: Object xstringx has no method 'save',其中xstringx是我在内容textarea框中输入的实际值。

this.get('model')实际上正在返回一个字符串!我怎样才能让它返回我的模型?以下是一些相关代码:

路线:

App.MessagesNewRoute = Ember.Route.extend({
model: function(){
    this.store.createRecord('message');
},
setupController: function(controller, model){
    controller.set('content', model);
},
renderTemplate: function() {
    this.render('app/templates/messages/new');
}
});

控制器:

App.MessagesNewController = Ember.ObjectController.extend({
actions: {
    save: function(){
    return this.get('model').save().then(function(){
        return _this.transitionToRoute('messages.index');
    });
    }       
}

});

查看:

App.MessagesNewView = Ember.View.extend({
templateName: "app/templates/messages/new",
actions: {
    save: function() {
        console.log(arguments);
    }
}
});

新消息模板:

<form role="form">
 <fieldset>
 <div class="form-group">
   <label {{bindAttr for="contentField.field_id"}}>Content</label>
  {{view Ember.TextArea valueBinding='content' class='form-control' name='content' viewName='contentField'}}
</div>
<div class="btn-group">
    <button type="submit" {{action "save"}} class="btn btn-success">Submit</button>
    <button class="btn btn-dancer">Cancel</button>
</div>

    

消息模型:

App.Message = DS.Model.extend({
content: DS.attr('string'),
user_id: DS.attr('number'),
created_at: DS.attr('string'),
updated_at: DS.attr('string'),
user: DS.belongsTo('user', {async: true}),
priority: DS.attr('number'),
priorityClass: function(user_id){
     //Return the middle size until implemented
    return 'importance-medium';
}.property('priority')
});

2 个答案:

答案 0 :(得分:1)

内容由于遗留原因而成为Ember中的保留字。

尝试将textArea绑定到model.content,或将属性名称更改为其他名称。

{{view Ember.TextArea valueBinding='model.content' class='form-control' name='content' viewName='contentField'}}

答案 1 :(得分:1)

不确定是否是拼写错误,但您需要从模型方法返回数据:

App.MessagesNewRoute = Ember.Route.extend({
    model: function(){
        return this.store.createRecord('message');
    },
    setupController: function(controller, model){
        controller.set('content', model);
    },
    renderTemplate: function() {
        this.render('app/templates/messages/new');
    }
});

使用迈克尔描述的content.contentmodel.content

{{view Ember.TextArea valueBinding='model.content' class='form-control' name='content' viewName='contentField'}}