使用 PouchDB 适配器在 Ember 2.2 中过滤结果
Filtering Results in Ember 2.2 with PouchDB Adapter
很难理解 Ember 2.2 中的过滤。我有一个 'isArchived' 属性为 true 或 false 的项目列表。我有两条用于活动 (false) 和存档 (true) 的路线,它们共享相同的组件,每个状态都有一些不同的 text/buttons。
<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 检查器中看到了数据。如果我创建数据,它会出现,但在我 killed/restarted 之前创建的任何内容都不会出现。
model() {
return this.store.filter('slideshow', function(record) {
return record.get('isArchived') === false;
});
}
使用此代码,数据确实出现在开始时,但显然没有被过滤:
model() {
return this.store.findAll('slideshow');
}
使用我在另一个 post 中找到的代码,当我单击存档按钮时,文本会发生变化,但它不会从列表中消失,直到我离开并返回:
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。
对我做错了什么有什么想法吗?
找到了修复它的方法:
model() {
return this.store.findAll('slideshow');
}
控制器:
activeSlideshows: function() {
return this.get('model').filterBy('isArchived', true);
}.property('model.@each.isArchived')
查看:
{{#each activeSlideshows as |slideshow|}}
{{/each}}
很难理解 Ember 2.2 中的过滤。我有一个 'isArchived' 属性为 true 或 false 的项目列表。我有两条用于活动 (false) 和存档 (true) 的路线,它们共享相同的组件,每个状态都有一些不同的 text/buttons。
<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 检查器中看到了数据。如果我创建数据,它会出现,但在我 killed/restarted 之前创建的任何内容都不会出现。
model() {
return this.store.filter('slideshow', function(record) {
return record.get('isArchived') === false;
});
}
使用此代码,数据确实出现在开始时,但显然没有被过滤:
model() {
return this.store.findAll('slideshow');
}
使用我在另一个 post 中找到的代码,当我单击存档按钮时,文本会发生变化,但它不会从列表中消失,直到我离开并返回:
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。
对我做错了什么有什么想法吗?
找到了修复它的方法:
model() {
return this.store.findAll('slideshow');
}
控制器:
activeSlideshows: function() {
return this.get('model').filterBy('isArchived', true);
}.property('model.@each.isArchived')
查看:
{{#each activeSlideshows as |slideshow|}}
{{/each}}