2016-06-14 30 views
0

我可以在服务中使用jsonapi吗?使用JSONAPI服务

//services/pics.js 

import Ember from 'ember'; 

export default Ember.Service.extend({ 
    findAll: function(){ 
     return Ember.$.getJSON('http://api.donanimhaber.com/api/v1/site/NewsSite?pageIndex=0&pageSize=15'); 
    } 

    }); 

我正在尝试但我看不到任何内容。并且在Chrome DevTools上没有错误。

//components/image-list.hbs

{{#each model as |pic|}} 
    <div>{{#link-to "pic" pic}}  
    <p class="info">{{pic.Title}}</p><br/> 
    <img src={{pic.Image}} width="300"> 
    {{/link-to}}</div> 
{{/each}} 
{{yield}} 

//templates/index.hbs

{{image-list model=model currentPos=currentPos }} 
{{outlet}} 

//routes/pic.js

import Ember from 'ember'; 
import DS from 'ember-data'; 

export default Ember.Route.extend({ 

    activate: function() { 
     this._super(...arguments); 
     window.scrollTo(0,0); 
    }, 

    pics: Ember.inject.service(), 
    model(params) { 
     console.info(params, "Params"); 
     return this.get('pics').get('pics').find(function(item){ 
      if(Ember.isEqual(params.NewsUrl,item.NewsUrl)){ 
       return true; 
      } 
      else { 
       return false; 
      } 
     }); 
} 
}); 

// routes/index.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    pics: Ember.inject.service(), 
    model() { 
     console.log(this.get('pics').get('pics')); 
     return this.get('pics').get('pics'); 
    } 

}); 
+0

你为什么要这么做?为什么不使用'ember-data',其中'store' *是一项服务。如果你不使用'ember-data',你将不得不手动分析和处理JSONAPI响应。 – Lux

+0

我试过了。我做不到。那么现在我正在尝试服务的东西。但是,如果你可以帮助这是当我试图与商店:https://ember-twiddle.com/fe9009abc8ecec2b4b48c91c64c8ff77?openFiles=twiddle.json%2Ctemplates.components.image-list.hbs你看不到数据这里请原谅我的API不是https:/尽管如此,但您可以先检查代码 – hbc

+0

,不要调用'Ember。$。getJSON',而是覆盖'urlForFindAll'。检出[API](http://emberjs.com/api/data/classes/DS.JSONAPIAdapter.html#method_urlForFindAll)和代码。接下来,如果你使用了ember数据,你为什么会在routes model hook中再次调用'Ember。$。getJSON' * *?询问你的商店:'this.store.findAll('news-list')'。接下来你的API不兼容* JSONAPI。所以不要使用'JSONAPIAdapter'和'JSONAPISerializer'。 – Lux

回答

0

理论上你可以,但我认为你应该从你的路线模型钩子返回你的getJSON调用结果。

如果您的目标是重用不同路由中的数据,那么您应该定义一个pic模型并将匹配的JSONAPIAdapter配置为指向您的API。然后,您可以在模型钩子中调用this.store.findAll('pic')以从API中获取所有图像。

检查有关模型定义的指南:https://guides.emberjs.com/v2.6.0/models/

也有关如何自定义适配器:https://guides.emberjs.com/v2.6.0/models/customizing-adapters/

+0

我也试过。我删除了服务,创建了一个模型news-list.js,并在其中放置了属性,然后创建了适配器并将getJSON代码放入其中。然后我尝试使用his.store.findAll('pic')但我无法获取数据。这是twiddle,但你不能看到数据在这里,因为我的api的https //不响应https:// https://ember-twiddle.com/fe9009abc8ecec2b4b48c91c64c8ff77?openFiles=twiddle.json%2Ctemplates.components.image-list.hbs – hbc