javascript - 在 ember.js 中保存对象时出错 : 'Object X has no method ' save''

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

我正在使用 Rails 和 Ember.js 构建应用程序,但在创建新对象时遇到了问题。在我的 ember Controller 中,当调用保存操作时,它会尝试调用 this.get('model').save()。实际对象只需要一个参数,称为“内容”即可创建。我收到的错误是 Uncaught TypeError: Object xstringx has no method 'save',其中 xstringx 是我在内容文本框中输入的实际值。

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');
}
});

Controller :

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')
});

最佳答案

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

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 就像 Michael 描述的那样

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

关于javascript - 在 ember.js 中保存对象时出错 : 'Object X has no method ' save'',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111286/

相关文章:

ruby-on-rails - 为什么 Capybara 不填写这些表单元素?

ruby-on-rails - 如何在 RoR 中实现成就系统

javascript - 升级 ember-cli 后的 ember-cli "TypeError: desc.get is not a function"

javascript - 在服务器上渲染的 React 组件中使用链接

javascript - 在大括号内和大括号外打印代码有什么区别?

ruby-on-rails - 如何动态更改 Rails 中 Stripe 的收费价格?

Ember.js - 如何在组件 View 中渲染默认导出

javascript - 如何将 ic-ajax 与 jsonp 一起使用?

Javascript、 Protractor 和增量计数器

javascript - 提交表单并在 <a> 单击时调用 Ajax