Ember.js find()不适用于参数

时间:2014-06-25 07:51:43

标签: javascript ember.js find ember-data

我正在尝试使用ember进行简单的帖子检索应用。只要我没有将参数传递给find()函数,一切正常:

这很有效:

return this.store.find('post')

但不是这些:

return this.store.find('post', { title: 'title1' })

return this.store.find('post', {})

无论参数如何,服务器都返回完全相同的JSON,但是当有参数时,Ember似乎不会处理它。商店空着。

这是完整的代码:

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

App.Router.map(function(){
    this.resource('myPosts');
});

App.ApplicationAdapter = DS.RESTAdapter.extend({
    namespace: 'api/v1/'
});

App.Post = DS.Model.extend({
    title : DS.attr( 'string' ),
    body : DS.attr( 'string' )
});

App.MyPostsRoute = Ember.Route.extend({
    model : function() {
        return this.store.find('post', { title: 'title1' })
    },

    setupController: function (controller, model) {
        controller.set('model', model);
    }
});

在所有情况下我都没有收到任何错误,查询处理得很好,我在chrome DevTools中检查过服务器返回的JSON是否相同。

这是返回的JSON。

{"post": [{"body": "a body", "title": "title1"}]}

handelbars模板很简单:

<script type="text/x-handlebars" id="myPosts">
    <div class = "postsWrapper">
        {{#each}}
            <div>{{this}}</div>
            <div>title: {{title}}</div>
        {{/each}}
    </div>
</script>

这是我用this.store.find('post',{title:'title1'})获得的输出:

<App.Post:ember382:null>
title:

这是我没有参数的那个:

<App.Post:ember294:null>
title: title1

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

在进一步对话后,我认为您的问题与API有关。

当您致电this.store.find('post')时,Ember应向GET端点发出api/v1/posts请求,该端点应返回以下JSON:

注意:这是一个带有一系列帖子对象的复数帖子对象。

{
    "posts": [
        { "body": "body1", "title": "title1" },
        { "body": "body2", "title": "title2" }
    ]
}

当您致电this.store.find('post', { title: 'title1' })时,Ember应向GET端点发出api/v1/posts?title=title1请求,该端点应返回此JSON:

注意:这是一个带有单个帖子对象的单个帖子对象。

{
    "post": { "body": "body1", "title": "title1" }
}

JSON从服务器返回的格式非常重要,API需要进行过滤,Ember不会过滤,除非你要求它。