我正在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')
});
答案 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.content
或model.content
{{view Ember.TextArea valueBinding='model.content' class='form-control' name='content' viewName='contentField'}}