很难理解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。
关于我做错的任何想法?
答案 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}}