使用ember-data创建和存储记录

时间:2014-01-29 23:08:36

标签: ember.js ember-data

我已经设置了以下模型:

App.Store = DS.Store.extend({adapter: DS.FixtureAdapter});
App.store = App.Store.create();
App.Proposal = DS.Model.extend({
    title: DS.attr('string'),
    description: DS.attr('description')
});
App.Proposal.FIXTURES = [...];

这很好用,我的应用程序会提取我的夹具数据并将其全部设置好。我可以毫无问题地移动我的应用程序。

由于显示数据有效,我创建了一条路线来创建新的提案。我无法弄清楚如何将它保存回我的数据存储,我认为我正在做的一切正确。这就是我正在做的事情:

App.ProposalsNewController = Ember.ObjectController.extend({
    newRecord: function() {
        this.set('content', App.Proposal.createRecord());
    },
    actions: {
        saveNewProposal: function() {
            var newProposal = App.Proposal.createRecord({...});
            newProposal.save();
            this.transitionToRoute('proposals.index');
        }
    }
});

App.ProposalsNewRoute = Ember.Route.extend({
    setupController: function(controller) {
        controller.newRecord();
    }
}

调用newProposal.save()时,数据存储区中不会显示任何内容。我的另一个问题是,大多数文档都说在创建记录时我应该使用this.store而不是App.Proposal,但这会产生以下错误:

TypeError: Object proposal has no method '_create'

创建和保存记录的正确方法是什么?或者只是因为我正在使用FixtureAdapter?

1 个答案:

答案 0 :(得分:0)

您确实使用了相当旧的Ember Data版本。

以下是Ember的一个简单示例,其中包含1.0 beta版本的ED。

http://emberjs.jsbin.com/OxIDiVU/73/edit

以下是您需要更改的一些基本概念:

您不再需要创建商店,而是创建适配器

应用程序范围的适配器

App.ApplicationAdapter = DS.RESTAdapter;

特定于型号的适配器

App.ColorAdapter = DS.FixtureAdapter;

模型创建/发现

创建模型(来自路线/控制器)

this.get('store').createRecord('color', {name: 'green'});

寻找模型(来自路线/控制器)

this.get('store').find('color'); //find all of the colors

this.get('store').find('color', 1); //find color id 1

您需要浏览一下Ember数据转换,它将在实际转到ED 1.0后立即发布。这就是文档过时的原因。

https://github.com/emberjs/data/blob/master/TRANSITION.md