我创建了一个路由,比如说日志(pods 结构),并创建了 controller.js、route.js 和 template.hbs
在模板中,我初始化了一个网格组件。另外我正在开发一个自定义分页组件。
当我初始化网格组件时,我将数据作为属性,这些数据将在从分页更改页面后发生变化,并且我还想计算页面大小,网格容器中适合多少行。通过拥有 pageSize,我可以计算出总页数。
我具有计算网格组件中 pageSize 的功能,但我希望在我的 controller.js 中使用该数字。我通过发送操作来管理它,并且我成功地在我的控制器上获得了号码。
然后在 dataHandler 计算属性上,我想计算网格将显示的数据。在那里我得到了弃用错误,并且网格中也没有显示任何内容:
弃用:在 didInsertElement 挂钩内修改了 的属性。你不应该在 didInsertElement 期间更改组件、服务或模型的属性,因为这会导致性能显着下降。[弃用 id:ember-views.dispatching-modify-property]
这种情况可能吗?如果是的话,最好的方法是什么?
在我的代码下面:
日志/controller.js
export default Ember.Controller.extend({
dataHandler: Ember.computed('pageSize', {
set(key, value) {
if (value) {
this.set('pageSize', value);
} else {
this.set('pageSize', null);
}
return value;
},
get() {
let data = this.get('data');
if (!data) {
let pageSize = this.get('pageSize');
data = this._data(); //Here will calculate the data and pass them to component
this.set('data', data);
}
return data;
}
}),
actions: {
setPageSizeFromDataGrid(pageSize) {
this.set('dataHandler', pageSize);
}
}
});
日志/模板.hbs
<div class='row'>
<div class='col-md-12'>
<h1>Request Logs</h1>
{{#si-data-grid data=dataHandler rowHeight=35 pageSize="setPageSizeFromDataGrid"}}
//some content
{{/si-data-grid}}
</div>
</div>
我的 component.js
export default Ember.Component.extend({
didRender() {
let that = this;
that._calculateContainerHeight();
let children = that.childViews;
let rowHeight = that.rowHeight || 20;
let data = that.data;
let columns = that._parseColumns(children);
let pageSize = that.getPageSize(rowHeight);
that.sendAction('pageSize', pageSize);
Ember.$(that.get('element')).find('div#si-data-grid').kendoGrid({
columns: columns,
dataSource: new kendo.data.DataSource({
data: data
})
});
Ember.$(that.get('element')).find('div#si-data-grid tr').css('height', rowHeight);
},
getPageSize(rowHeight) {
let paginationHeight = 40;
let gridHeaderHeight = this.$().offsetParent().offset().top;
let height = this.$().height() - gridHeaderHeight - paginationHeight;
return Math.floor(height / rowHeight);
}
});