2013-10-22 32 views
2

我是EmberJs的新手,我在Ember的Adapter中没有清楚地理解。我只是在我的App.Js中尝试了这个ember adapter,并且我得到了这个错误(断言失败:您试图设置adapter属性到DS.Adapter的实例,它应该是名称或工厂)。我烬在App.js代码:EmberJS中的RESTAdapter

//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; 

回答

1

定义店这样

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

没有建立()。

1

适配器的主要用途是根据一些约定来完成数据的序列化和deserailzation,如构建url来发布或获取数据,然后从响应中构建实际对象。由余烬数据模型使用的默认适配器是Rest适配器。

看到

http://emberjs.com/guides/models/the-rest-adapter/ 更多细节

要使用比其他适配器等不同的转接器,你可以像

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

0

尝试指定其名称:

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

这对我的作品

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; 

灰烬就会知道哪些型号/路由/等基于自己的名字使用 - 看到http://emberjs.com/guides/concepts/naming-conventions/的细节。