Angular Clarity Datagrid服务器端绑定与自定义筛选器(代码优化)

Angular Clarity Datagrid服务器端绑定与自定义筛选器(代码优化),angular,vmware-clarity,clarity,Angular,Vmware Clarity,Clarity,我正在尝试优化我的代码,利用Clarity datagrid和服务器端绑定以及一些自定义操作(例如。, 自定义筛选器(类似于)和刷新按钮(用于重新蚀刻网格数据并进行其他调用) 这是当前的工作流程: 初始荷载 datagridRefresh() 刷新() 附加调用() dispatchFilterRequestPromise() 自定义刷新按钮 刷新() 附加调用() dispatchFilterRequestPromise() 寻呼 datagridRefresh()

我正在尝试优化我的代码,利用Clarity datagrid和服务器端绑定以及一些自定义操作(例如。, 自定义筛选器(类似于)和刷新按钮(用于重新蚀刻网格数据并进行其他调用)

这是当前的工作流程:

  • 初始荷载

    • datagridRefresh()

      • 刷新()

        • 附加调用()
        • dispatchFilterRequestPromise()
  • 自定义刷新按钮

    • 刷新()

      • 附加调用()
      • dispatchFilterRequestPromise()
  • 寻呼
    • datagridRefresh()
      • dispatchFilterRequestPromise()
  • 自定义筛选

    • 过滤器更改()

      • $(“.pagination first”)。单击()
        • datagridRefresh()
          • dispatchFilterRequestPromise()
      • (或)DispatchFilterRequestPromission()
gridView.html:

{
等待此消息。DispatchFilterRequestPromission(状态);
});
}
过滤器更改(过滤器:过滤器项[]){
this.filters=过滤器;
//如果当前页面>1时将total更改为较小的值,则会触发CLRDGRESH事件,该事件
//导致另一个请求。
//下面的代码解决了这个问题,并确保在应用过滤器时当前页面为1。
如果(this.state&&this.state.page&&this.state.page.from&&
this.state.page.from>gridView.DEFAULT\u START\u INDEX){
$(“.pagination first”)。单击();
}否则{
this.refreshSubject.next(this.state);
}
}
刷新(){
此函数为.additionalCalls();
this.dispatchFilterRequestPromission(this.state);
}
附加调用(){
...
}
datagridRefresh(状态:ClrDatagridStateInterface){
//记住单击“全局刷新”按钮时再次使用它的最后一个状态
this.state=状态;
//CLRDGRESH事件在初始加载和每个筛选/分页操作时激发。
//不需要在初始网格加载时获取数据,因为这是在连接全局刷新处理程序时完成的。
if(this.gridFirstRefresh){
this.gridFirstRefresh=false;
这个。刷新();
}否则{
这是。加载=真;
this.refreshSubject.next(state);
}
}
DispatchFilterRequestPromission=(状态:ClrDatagridStateInterface):Promise=>{
const requestFilters:MyFilterSpec=this.createRequestFilters(state);
如果(请求过滤器){
这个.dataService.getDataItems(ManagedObject.contextObject,requestFilters)。然后(结果=>{
this.dataItems=result.dataItems;
this.total=result.total;});
}否则{
this.dataItems=[];
这个总数=0;
返回null;
}
};
  • 我在CLRDGRESH(即datagridRefresh)中有一个标志来区分初始加载和后续调用。我发现有一个bug与避免在初始加载时触发CLRDGRESH()有关。如果bug被解决了,我可以将该标志内的代码移动到onInit事件,但我看到问题已经在2年前出现,不确定是否有任何进展

  • 另一个问题与触发自定义筛选器更新(即filterChange())有关

    • 通常,如果当前页面>1时将total更改为较小的值,则会触发CLRDGRESH事件,从而导致附加请求。这是一个问题吗
    • 如果满足上述条件,我将以编程方式单击第一页以触发CLRDGRESH,否则调用dispatchFilterRequestPromise()。有没有更好的方法来处理这个问题? 我发现与绑定过滤器(和)相关的一些问题,如果实现,可能会改进当前代码
  • 我想知道与定制寻呼机进行客户端绑定是否会使代码看起来比当前的方法更清晰


如果您开始使用此绑定,Clarity Datagrid会自动调用
CLRDGRESH
。没有办法处理/避免这些电话。但是,如果我们在函数
datagridRefresh()
之前添加一个去抖动,那么我们可以使用一个标志来控制它。请看看这个

其次,还有一个使用了
clrdgresh
,它不会在相应组件的
ngDestroy
上立即被销毁,因此它会在路由更改事件中多次调用处理程序。同样,可以通过上述相同的解决方法解决此问题(请参阅stackblitz)