2016-05-10 38 views
0

Im建立一個Ember應用程序「ember-cli」:「2.4.3」,坐在Laravel/Lumen上,看起來不能正確連接電線。我也嘗試一個API服務器JSON-API兼容,所以我有權修改語法,如果這是一個問題。Ember,JSONAPIAdapter,JSONAPISerializer,findAll不可用

如果我刪除默認的出口DS.JSONAPISERIALIZER,我得到ember.debug.js:32116 TypeError: typeClass.eachTransformedAttribute is not a function

有了它,我通常得到Assertion Failed: You tried to load all records but your adapter does not implement findAll

如果我打電話getJSON(...)從路線中,而不是要求數據的存儲,它完美地工作,並按預期顯示到視圖中。

我試過其他適配器,但我認爲是符合JSON-API我需要使用JSONAPIADAPTER。任何幫助都是極好的。

的application.js

import DS from "ember-data"; 

export default DS.JSONAPIAdapter.extend({ 
namespace: 'v1', 
host: 'http://edu-api.app:8000', 
}); 

export default DS.JSONAPISerializer.extend({ 
//in preparation of underscores in returned data 
// keyForAttribute: function(attr) { 
//  return Ember.String.underscore(attr); 
// }, 
// keyForRelationship: function(attr) { 
//  return Ember.String.underscore(attr); 
// } 
}); 

skill.js

import DS from 'ember-data'; 
var App = window.App = Ember.Application.extend(); 
var attr = DS.attr; 

App.Skill = DS.Model.extend({ 
    name: attr("string"), 
    desc: attr("string") 
}); 

index.js

export default Ember.Route.extend({ 
    model() { 
    //return this.store.findAll('skill'); //<- Assertion Failed: You tried to load all records but your adapter does not implement `findAll` 
    this.get('store').findAll('skill'); //<- Assertion Failed: You tried to load all records but your adapter does not implement `findAll` 
    //return Ember.$.getJSON('http://edu-api.app:8000/v1/skills'); //<- works, and properly displays data to view 
    } 
}); 

回答

0

我想你已經主要問題的理解ember-cli

首先你不把你的適配器和序列化器放在同一個文件中。也許使用生成器來獲取像ember generate serializer application這樣的默認文件。

您的應用程序序列化器轉到app/serializers/application.js,您的轉接器轉到app/adapters/application.js

下一頁這一行看起來真的真的錯了:

var App = window.App = Ember.Application.extend(); 

這將創建一個新的應用程序,但你應該在你的app/app.js做到這一點只有一次。接下來你使用全局導出,你應該怎麼做從來沒有做在ember-cli應用程序。

要指定您的模型,您需要找到您的文件在models/skill.js下。在那裏,您不會將新模型附加到全球出口App,如App.Skill = DS.Model.extend({,但可以將其導出爲默認導出,如export default DS.Model.extend({

您的index.js如果位於routes/下面看起來不錯。

我強烈建議您閱讀更多關於ember解析器和ember依賴注入框架的信息,這些框架爲您提供了所有的魔力。還可以使用生成器來獲取文件,它可以幫助您將文件正確放置。

+0

thans勒克斯,我仔細檢查你的suggstions。我實際上已將序列化程序和適配器放在正確的文件夾中。我應該提到的一件事是我使用發生器創建了香草應用程序並將其移動到流明框架中,我懷疑這是否會產生任何差異。 – Rockman

+0

那麼,但你希望使用'ember-cli'構建步驟和開發服務器?我建議分割你的後端和你的前端,所以你的Laravel/Lumen完全不重要。只是爲了生產,你可以一起構建它。 – Lux

+1

「我應該提到的一件事是,我使用發生器創建了香草應用程序,並將它移動到流明框架中,我懷疑這有什麼不同。」在將其部署到Lumen之前,您必須構建您的應用程序。 – locks