使用PouchDB适配器过滤Ember 2.2中的结果

时间:2016-02-14 23:26:47

标签: javascript ember.js ember-data pouchdb

很难理解Ember 2.2中的过滤。我有一个带有'isArchived'属性的项目列表,该属性为true或false。我有两条用于活动(false)和归档(true)的路由,它们为每个状态共享相同的组件和一些不同的文本/按钮。

<h2>{{slideshow.title}}</h2>

{{#if slideshow.isArchived}}
    <p class="stats"><strong>Archived on</strong> {{slideshow.dateArchived}}</p>

    <ul class="btn-list">
        <li><a {{action 'restoreSlideshow' slideshow}}>Restore</a></li>
    </ul>
{{else}}
    <p class="stats"><strong>Created on</strong> {{slideshow.dateCreated}}</p>

    <ul class="btn-list">
        <li><a {{action 'archiveSlideshow' slideshow}}>Archive</a></li>
    </ul>
{{/if}}

组件JS:

    archiveSlideshow: function(slideshow) {
        slideshow.set('isArchived', true);
        slideshow.save();
    },
    restoreSlideshow: function(slideshow) {
        slideshow.set('isArchived', false);
        slideshow.save();
    }

使用此代码,列表按预期工作,单击存档会从列表中删除该项目,并显示在另一个列表中。但是当我启动ember服务器时,列表是空白的?我确实在PouchDB检查器中看到了数据。如果我创建数据它会出现,但是在我杀死/重新启动之前先前创建的任何内容都不会出现。

model() {
    return this.store.filter('slideshow', function(record) {
        return record.get('isArchived') === false;
    });
}

使用此代码,数据会在开始时显示,但显然不会被过滤:

model() {
    return this.store.findAll('slideshow');
}

我在另一篇文章中找到了这个代码,当我点击存档按钮时,文本会发生变化,但在我离开并返回之前它不会从列表中消失:

model() {
    var self = this;

    return new Ember.RSVP.Promise(function(resolve) {
        self.store.findAll('slideshow').then(function(slideshows) {
            resolve(slideshows.filterBy('isArchived', false));
        });
    });
}

还发现这个方法与前一个方法相同:

model() {
    return this.store.findAll('slideshow').then(function(slideshows) {
        return slideshows.filter(function(slideshow) {
            return slideshow.get('isArchived') === false;
        });
    });
}

每条路线的模型函数是相同的,唯一的区别是=== false或=== true。

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:0)

找到解决问题的方法:

model() {
    return this.store.findAll('slideshow');
}

控制器:

activeSlideshows: function() {
    return this.get('model').filterBy('isArchived', true);
}.property('model.@each.isArchived')

查看:

{{#each activeSlideshows as |slideshow|}}
{{/each}}