Ember JS无法使用新的ember-data语法创建记录

时间:2013-11-07 14:44:43

标签: ember.js ember-data

我正在尝试使用新的余烬数据语法,如下所述:https://github.com/emberjs/data/blob/master/TRANSITION.md(从交易已删除:保存个人记录)。

当我点击保存按钮时,我在控制台中收到错误Uncaught TypeError: Cannot call method 'save' of undefined。同样在网络选项卡中,没有对api的POST请求。

模板

<script type="text/x-handlebars" data-template-name="landcode/new">
    Code: {{input value=code}}<br />
    Image: {{input value=image}}<br />
<button {{action 'saveLandcode'}}>opslaan</button>

app.js (相关代码)

App.Router.map(function() {
    this.resource("landcodes"),
    this.resource("landcode", function() {
        this.route("new");
    });
});

App.LandcodeNewRoute = Ember.Route.extend({
    model: function() {
        this.store.createRecord('landcode');
    },
    actions: {
        saveLandcode: function(){
            this.modelFor('landcode').save(); // does not save
        }
    }
});

App.ApplicationAdapter = DS.RESTAdapter.extend({
    namespace: 'api'
});
App.Store = DS.Store.extend({
    adapter: 'App.ApplicationAdapter'
});

App.Landcode = DS.Model.extend({
    code: DS.attr('string'),
    image: DS.attr('string')
});

2 个答案:

答案 0 :(得分:2)

您正在使用this.modelFor('landcode')这将从App.LandcodeRoute获取返回的模型,但您的模型是从LandcodeNewRoute返回的。只需使用this.currentModel,因为您需要当前路线的模型。

App.LandcodeNewRoute = Ember.Route.extend({
    model: function() {
        return this.store.createRecord('landcode');
    },
    actions: {
        saveLandcode: function(){
            this.currentModel.save();
        }
    }
});

答案 1 :(得分:2)

您的模型应包括路线名称

App.LandcodeNewRoute = Ember.Route.extend({
    model: function() {
        return this.store.createRecord('landcode');
    },
    actions: {
        saveLandcode: function(){
            this.modelFor('landcode.new').save(); // the correct model
        }
    }
});