Handlebars组件呈现但未填充json数据

时间:2016-08-10 20:48:57

标签: ember.js handlebars.js ember-data

我是ember的新手,我正在尝试在我的ember.js应用中创建导航组件。

我之前创建的组件与从API提供的json数据呈现博客文章的方式完全相同。基本上,您在此处看到的代码完全相同,但关键字post已替换为关键字页面。

问题是正在渲染把手组件,但是没有渲染page.title.rendered'。即使我在序列化程序中尝试console.log(有效负载),也没有控制台输出。好像他们没有得到承认。

来自api的json样本

[
   {
      "id":139,
      "title":{
         "rendered":"test"
      }
   }
]

适配器/ page.js

export default Eudora.extend({

    pathForType() {
        return 'pages';
    }
});

模型/ page.js

import Model from 'ember-data/model';
import DS from 'ember-data';

const { 
    attr,
    //belongsTo 
} = DS;

export default Model.extend({

    title: attr()

});

路由/ pages.js

import Ember from 'ember';

const {
    Route,
    set
} = Ember;

export default Route.extend({

    model() {

        return this.store.findAll('page');
    },

    setupController(controller, model) {
        set(controller, 'pages', model);
    }
});

串行器/ page.js

import DS from 'ember-data';

export default DS.RESTSerializer.extend({

    normalizeResponse( store, primaryModelClass, payload, id, requestType) {

        payload = { pages: payload };

        return this._super( store, primaryModelClass, payload, id, requestType );

    }
});

模板/组件/全局navigation.hbs

{{#each pages as |page|}}
    <li>
        <a href="#">{{page.title.rendered}}</a>
    </li>          
{{/each}}

模板/ application.hbs

{{global-navigation pages=pages}}

2 个答案:

答案 0 :(得分:1)

content模型中没有page属性。正确的代码将是

<a href="#">{{page.title.rendered}}</a>

我想在adapters/page.js文件中,Eudora正在扩展DS.RESTAdapter

页面路径模型挂钩返回页面模型,但您尝试将其包含在application.hbs中。所以将{{global-navigation pages=pages}}移至routes/pages.hbs。并访问网址'/pages

我为您创建了示例EMBER-TWIDDLE。这将显示应用程序和页面路由的结果。

答案 1 :(得分:0)

感谢@kumkanillam帮助我找到答案。正如评论中所写,我的问题是:

  

...您在应用程序路径中包含全局导航但是您   正在页面路线中加载模型......

因此我必须扩展我的路由/ application.js以包括帖子和页面。下面的代码说明了我是如何做到的:

路由/ application.js中

take