2

我是 EmberJs 的新手,我对 Ember 的适配器不是很清楚。我只是在我的 App.Js 中尝试使用 ember 适配器,然后我得到了这个错误(断言失败:你试图将adapter属性设置为一个实例DS.Adapter,它在哪里应该是名称或工厂)。我在 App.js 中的 ember 代码是:

//Store
App.Adapter =  DS.RESTAdapter.extend();
App.Store = DS.Store.extend({
    revision: 12,
    adapter: App.Adapter.create()
});
//Models
App.Product = DS.Model.extend({
    name: DS.attr('string'),
    description: DS.attr('string'),
    price: DS.attr('number')
});

// Products Route
 App.ProductsRoute = Ember.Route.extend({
  model: (function() {
      return this.store.find('Product');
  })
});
return App;
4

4 回答 4

5

我认为您误解了设置和配置适配器的方式。

//
// Application-wide adapter, everything will use this unless you override it
//

App.ApplicationAdapter =  DS.RESTAdapter.extend({
  host: 'https://api.example.com'
});

//
// Product model, will use ApplicationAdapter
// 

App.Product = DS.Model.extend({
  name        : DS.attr('string'),
  description : DS.attr('string'),
  price       : DS.attr('number')
});

//
// Invoice model, will use fixtures, so specify a different adapter 
// 

App.InvoiceAdapter =  DS.FixtureAdapter.extend({ /* options */ });

App.Invoice = DS.Model.extend({
  name   : DS.attr('string'),
  amount : DS.attr('number')
});

//    
// Routes, these should work as expected
//

App.ProductRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('product', params.id);
  }
});

App.ProductsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('product');
  }
});

App.InvoicesRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('invoice');
  }
});

return App;

Ember 将根据它们的名称知道要使用哪些模型/路由/等 - 有关详细信息,请参阅http://emberjs.com/guides/concepts/naming-conventions/

于 2014-08-06T09:24:49.023 回答
1

以这种方式定义商店

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

没有创建()。

于 2013-10-22T14:27:40.510 回答
1

适配器的主要用途是根据一些约定对数据进行序列化和反序列化,例如构造用于发布或获取数据的 url,然后从响应中构造实际对象。ember 数据模型使用的默认适配器是 Rest 适配器。

http://emberjs.com/guides/models/the-rest-adapter/ 了解更多详情

要使用其他适配器而不是其余适配器,您可以指定其名称,例如

Storm.Store = DS.Store.extend({ adapter: '_ams', });

于 2014-02-05T09:18:31.310 回答
0

尝试:

App.ApplicationAdapter = DS.RESTAdapter.extend();

这对我有用

于 2014-02-19T16:43:15.907 回答