【发布时间】:2015-07-22 21:51:15
【问题描述】:
在过滤 hasMany 对象的 ul 时,我在进行 dom 更新时遇到问题。这是我想要完成的任务:
当用户点击其中一个链接时,它应该过滤掉包含相应元素的 div。这是我当前的代码:
路线
import Ember from 'ember';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin,{
model: function (params) {
return this.store.find('recipient', params.recipient_id);
},
setupController: function (controller, model) {
this._super(controller, model);
var categories = model.get('offers').map(function(offer){
var category = Ember.Object.create();
category.name = offer.get('company_industry');
category.count = model.get('offers').filterBy('company_industry', offer.get('company_industry')).get('length');
return category;
});
controller.set('categories', categories);
}
});
这会将categories 设置为一个 Ember 对象,如下所示:
{name: 'Home And Beauty', count: 1}
组件:filterable-offers.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
filter: function(categoryName) {
return this.get('model').get('offers').filterBy("company_industry", categoryName);
}
}
});
filterable-offers.hbs
<ul>
{{#each categories as |category|}}
<li>
<a {{action "filter" category.name}}>{{category.name}} ({{category.count}})</a>
</li>
{{/each}}
</ul>
recipient.hbs
<div class="row">
<div class="col-sm-4">
{{filterable-offers categories=categories model=model}}
</div>
<div class="col-sm-8">
{{#each model.offers as |offer|}}
<div class="offer-card">
{{offer.text}}
</div>
{{/each}}
</div>
我知道我错过了一些简单的东西,比如在这里观察一些东西,但是当我点击链接过滤掉元素时,dom 中没有任何更新。过滤器函数确实返回了我想要的结果集,但主收件人模板中的 model.offers 调用没有观察到它。
【问题讨论】:
标签: javascript ember.js