我是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;
答案 0 :(得分:4)
我认为您误解了设置和配置适配器的方式。
//
// 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/。
答案 1 :(得分:1)
以这种方式定义商店
App.Store = DS.Store.extend({
revision: 12,
adapter: App.Adapter
});
没有create()。
答案 2 :(得分:1)
适配器的主要用途是根据一些约定来执行数据的序列化和取消化,例如构造url以发布或从中获取数据,然后从响应构造实际对象。 ember数据模型使用的默认适配器是Rest适配器。
见
要使用除其余适配器以外的其他适配器,您可以指定其名称,如
Storm.Store = DS.Store.extend({
adapter: '_ams',
});
答案 3 :(得分:0)
尝试:
App.ApplicationAdapter = DS.RESTAdapter.extend();
这对我有用