如何创建一个ember数据事务

时间:2013-01-31 04:48:09

标签: javascript ember.js datastore ember-data

我正在尝试创建一个事务来创建一个新用户。

来自ember-data.js src:

  

要创建新交易,请调用您的transaction()方法   应用程序的DS.Store实例:

  var transaction = App.store.transaction();

我正在尝试在控制器中创建事务

App.CreateUserController = Ember.Controller.extend({
    addUser: function() {
        var transaction = App.store.transaction();
    }
});

但我正在

TypeError: App.store is undefined

我定义了这个商店

App.Store = DS.Store.extend({
  revision: 11,
  adapter: App.Adapter.create({})
});

它使用了一个标准的S,所以我尝试将App.store更改为App.Store,然后我得到了

TypeError: App.Store.transaction is not a function

如果我将App.Store更改为使用小写s,我会

TypeError: store is undefined

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

您需要创建商店而不是扩展商店。惯例是在创建实例时使用小写字母,因此应该创建商店并将其命名为App.store

而不是App.Store。
App.store = DS.Store.create({
  revision: 11,
  adapter: App.Adapter.create({})
});

然后你就可以创建一个交易

var transaction = App.store.transaction();

答案 1 :(得分:2)

Ember.js中的交易消失了:保存个人记录。 https://github.com/emberjs/data/blob/master/TRANSITION.md

答案 2 :(得分:1)

您已定义App.Store,这是 ;您是extend DS.Store,这是一个现有的类。应该在商店的 实例 上调用创建事务的代码(按照惯例,类是大写的,实例是小写的。)

创建已定义商店的实例:

App.store = App.Store.create();
myTransaction = App.store.transaction();

请注意,您{Store}类extend可以获取自己的Store类,并在自己的商店类上调用create来实例化它。

有关extend vs create的更多信息,请参阅What's the difference between ember.js extend and create?