为什么我的 Ember store.query() 查询所有内容?

Why does my Ember store.query() query everything?

在Ember.js,

我正在尝试查询所有具有匹配键的帖子。顺便说一句,这是在 Firebase 中。我的数据看起来像这样:

我正在尝试根据 key 属性 查询特定 posts(多个帖子可能具有相同的 key 属性 值)。

这是我的 model(params) 在我的路线

route/stuff.js

export default Ember.Route.extend({
    model(params) {
        console.log(params.site_id);
        return this.store.query('post', { "key": params.site_id} );
    }
})

这里是我尝试在我的模板中显示我的帖子:

template/stuff.hbs

{{#each model as |post|}}
<div class="panel panel-default">
    <div class="panel-heading">
        Post Title: {{post.title}}
    </div>
    <div class="panel-body">
        <div class="col-lg-6 col-md-6 col-sm-6 margin-top-1em">
            <ul class="li-type-none">
                <li>Post Author: {{post.author}}</li>
            </ul>
        </div>
        <div class="col-lg-6 col-md-6 col-sm-6">
            <ul class="nav nav-pills margin-top-small">
                {{#link-to 'posts.edit' post.id class='btn btn-success btn-s'}}Edit{{/link-to}}
                <button class="btn btn-danger btn-s" {{action 'deletePost' post}}>Remove Post</button>
            </ul>
        </div>
    </div>
</div>
{{/each}}


{{outlet}}

而且,好消息是我的 posts 将会显示。坏消息是显示所有帖子。即使是那些没有正确钥匙的人。为什么我的查询返回所有帖子而不是仅返回具有正确键属性的帖子?

这里有一些可能有用的额外信息:

model/post.js

import DS from 'ember-data';

export default DS.Model.extend({
  author: DS.attr('string'),
  title: DS.attr('string'),
  content: DS.attr('string'),
  key: DS.attr('string'),
  date: DS.attr('date', { defaultValue() { return new Date(); }}),
  site: DS.belongsTo('site'),
  isLocked: DS.attr('boolean'),
  lockedContent: DS.attr('string'),
  metaData: DS.attr('string')
});

此外,这是它在 URL 中的样子(注意 key 属性被传递到 url)

http://localhost:4200/posts/-D2312jsj23u1828u42/stuff

谢谢!

您的查询规则因适配器而异。

这意味着此解决方案仅在您使用 emberfire 适配器时才有效。如果您没有使用 emberfire 适配器,您需要查看适配器的文档以了解查询如何针对您的特定适配器工作

export default Ember.Route.extend({
    model(params) {
        console.log(params.site_id);
        return this.store.query('post', {orderBy: 'author', equalTo: "Cameron Fife"} ).then(function(res) {
            return res
        });
    }
});