断言失败:您的服务器返回了具有密钥类别的哈希,但您没有映射

时间:2013-08-04 07:56:33

标签: ember.js ember-data

注意确实该怎么做。我正在尝试使用slug而不是ID但是当我尝试直接转到链接(/ categories / source)时,我得到了错误。我尝试在RESTadapter中添加映射但它没有用。我哈哈

我觉得我的问题出现在我的CategoryRoute / model代码中,但我看不出能得到正确的组合。任何帮助表示赞赏。

说实话,我不知道为什么在已经获得模型信息时必须进行两次REST调用。感谢任何帮助,谢谢!

Json回复

{"categories":[{"id":1,"name":"Misc","slug":"misc"},{"id":2,"name":"Technology","slug":"technology"},{"id":3,"name":"Ecommerce","slug":"ecommerce"},{"id":4,"name":"Visitor","slug":"visitor"},{"id":5,"name":"Content","slug":"content"},{"id":6,"name":"evars","slug":"evars"},{"id":7,"name":"Marketing","slug":"marketing"},{"id":8,"name":"Props","slug":"props"},{"id":9,"name":"Source","slug":"source"}]}

{"category":{"id":2,"name":"Technology","slug":"technology"}}

Html文件

<script type="text/x-handlebars">
    <div class="container">
        <div class="navbar navbar-inverse">
            <a class="navbar-brand" href="#">LayerSpark</a>
            <ul class="nav navbar-nav">
                <li>{{#linkTo 'categories'}}Categories{{/linkTo}}</li>
                <li>{{#linkTo 'help'}}Help{{/linkTo}}</li>
                <li>{{#linkTo 'account'}}Account{{/linkTo}}</li>
            </ul>
        </div>
    </div>
    <div class="container">
                {{outlet}}

    </div>

</script>


<script type="text/x-handlebars" id="categories">

    <div  {{bindAttr class=":row"}}>
        <div {{bindAttr class=":col-lg-4"}}>
            <ul>
                {{#each model}}
                <li>{{#linkTo 'category' this}}{{name}}{{/linkTo}}</li>
                {{/each}}
            </ul>

        </div>
        <div {{bindAttr class=":col-lg-8"}}>
            {{outlet}}
        </div>
    </div>

</script>

<script type="text/x-handlebars" id="category">
   Post:<br>
    My name is :: {{ name }}<br>
    My id is :: {{id}}<br>
    My slug is :: {{slug}}<br>

</script>

<script type="text/x-handlebars" id="categories/index">
    <p class="text-warning">Please select a Category</p>
</script>

App.js

App = Ember.Application.create({
    LOG_TRANSITIONS:true
});
var attr = DS.attr;

App.Category = DS.Model.extend({
    name: attr('string'),
    slug: attr('string')
});

DS.RESTAdapter.configure("plurals", {
    category: "categories"
});
App.Store = DS.Store.extend({
    revision: 12,
    adapter: DS.RESTAdapter.create({
        url: '/api',
        mappings:{
            category:'App.Category'
        }
    })
});


App.Router.map(function() {
    this.resource('about');
    this.resource('categories', function() {
        this.resource('category',{path:':category_slug'});
    });
    this.resource('help');
    this.resource('account');
});

App.CategoriesRoute = Ember.Route.extend({

    model: function() {
        return App.Category.find();
    }
});

App.CategoryRoute = Ember.Route.extend({

    model: function(route,model) {
        console.log(route);window.mod = model;
        return App.Category.find({slug:route.category_slug});
    },
    serialize: function(model) {
        return {
            category_slug: model.get('slug')
        };
    }
});


Ember.Handlebars.registerBoundHelper('markdown', function(input) {
    return new Handlebars.SafeString(showdown.makeHtml(input));
});

Ember.Handlebars.registerBoundHelper('date', function(date) {
    return moment(date).fromNow();
});

1 个答案:

答案 0 :(得分:0)

我使用了以下路由器设置,以便我可以拥有对应于/ posts /:id路由的Post资源。还提供属于帖子的评论。

  this.resource('posts', function() {
    this.route('new');
  });
  this.resource('post', { path: '/posts/:post_id' }, function() {
    this.resource('comments', function() {
      this.route('new');
      this.route('create');
    });
    this.route('comment', { path: 'comments/:comment_id'});
  });

我必须单独定义类别资源,然后明确说明该帖子位于资源定义中的/ posts路径下。也许你需要一个路由器,如:

this.resource('categories', function() {});
this.resource('category',{path:'/categories/:category_slug'});