9

我正在尝试有条件地禁用 OUIF 详细信息列表中某些行上的鼠标单击事件。但我似乎无法让它工作。我尝试覆盖 onRenderRow 并将 CheckboxVisibility 设置为 none,但它仍然是可点击的。然后我尝试在它周围包裹一个 div 并将其设置为禁用。但是,React 中的 div 似乎没有 disabled 属性。那么有人可以在这里帮助我吗?

<DetailsList
    items={this.state.items}
    columns={this.getColumns()}
    selection={this.selection}                    
    selectionMode={SelectionMode.multiple}
    onRenderRow={this.renderRow.bind(this)}>
</DetailsList>

private renderRow(props: IDetailsRowProps, defaultRender: any){
    let state = this.state.items[props.itemIndex].workflowState;
    if(state === "disabledState"){
        //props.checkboxVisibility = CheckboxVisibility.hidden; <- Not working
        // return <div disabled={true}>{defaultRender(props)}</div> <- Not working
        return defaultRender(props);
    }
    else{
        return defaultRender(props);
    }
}

解决方案:

this.selection = new Selection({ canSelectItem: this.canSelectItem.bind(this), onSelectionChanged: this.clickRow.bind(this) });

<DetailsList
    items={this.state.items}
    columns={this.getColumns()}
    selection={this.selection}                    
    selectionMode={SelectionMode.multiple}
    onRenderRow={this.renderRow.bind(this)}>
</DetailsList>

private canSelectItem(item: any): boolean {
    return item.state !== "disabledState";
}
4

2 回答 2

7

好的,我可以再次回答我自己的问题。Selection 对象确实有一个 canSelectItem 函数来检查用户是否应该能够选择某些项目。此函数应返回一个布尔值,并从数组中获取当前选定的项目,以便您可以轻松检查值。我用解决方案编辑了上面的代码。

于 2017-08-16T15:45:53.530 回答
0

我会将函数绑定到onClickthenpreventDefaultstopPropagation? 还要编辑 CSS 以删除cursor效果,使其看起来像一个普通的 HTML 标记。

就像是:

if(state === "disabledState"){  
  let onClickFunc = this.preventClick.bind(this);
} else {
  let onClickFunc = this.normalClick.bind(this);
}

return <div onClick={onClickFunc}>{defaultRender(props)}</div>

于 2017-08-16T15:28:30.847 回答