希望你能帮我解决这个问题,因为它已经困扰我几天了。
我对页面的标记:[表]
我的自定义DataTable扩展Java代码(扩展以确保添加了所有outputMarkUp):@override protected void onInitialize(){super.onInitialize();this.addtopToolbar(新的NavigationToolbar(this));this.addtopToolbar(新的HeaderStoolbar<>(this,(ISortableDataProvider)this.getDataProvider()));this.addbottomToolbar(新的NoRecordsToolbar(this));
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(CssReferenceHeaderItem.forReference(WarehouseToolbarCssReference.get()));
}
@Override
protected Item<T> newRowItem(String id, int index, IModel<T> model) {
Item<T> item = super.newRowItem(id, index, model);
this.lastId = Integer.valueOf(id);
item.setMarkupId(this.getId() + item.getId());
return item;
}
第一列使用自定义面板来填充列中的单元格,但经过大量尝试和测试后,我实际上最终使用了来自Wicket本身的常规节点:
<wicket:panel xmlns:wicket="http://wicket.apache.org">
<a wicket:id="junction"></a>
<span wicket:id="content" class="tree-content">[content]</span>
cellspacing="0" wicket:id="reasonData">[Reason data]</table>-->
</wicket:panel>
最后,创建新行并填充必要数据(它本身就是一个新的DataTable)以及填充Ajax-target的代码:
public void onClick(AjaxRequestTarget target) {
Integer currentRowIndex = Integer.valueOf(this.findParent(Item.class).findParent(Item.class).getId());
String rowId = this.findParent(Item.class).findParent(Item.class).getMarkupId();
Item<IColumn<OldOrder, String>> newChild = null;
this.dataTable.setVisible(true);
newChild = new Item<>(String.valueOf(this.findParent(DataTable.class).getLastId() + 1), currentRowIndex * -1, null);
newChild.setOutputMarkupId(true);
target.prependJavaScript(String.format("var item=document.createElement(\"tr\"); item.id=\"%s\"; $(\"#%s\").after(item);", newChild.getId(), rowId));
this.populateChildRow(newChild); // This is where the new row gets filled with the new data
Component rows = this.findParent(DataTable.class).getBody().get("rows");
if (rows instanceof WebMarkupContainer) {
((WebMarkupContainer)rows).add(newChild);
}
target.add(this.findParent(DataTable.class).getBody());
}
// This is where the new row gets filled with the new data
private void populateChildRow(Item<IColumn<ParentClass>, String>> item) {
RepeatingView cells = new RepeatingView("cells"){
@Override // Overridden to check if this gets executed... it doesn't
protected void onAfterRender() {
super.onAfterRender();
String stop = "STOP";
}
};
item.add(cells);
Item<?> cellItem = new Item<>("arbitrary", 1, null);
cells.add(cellItem);
cells.setVisible(false);
cells.setOutputMarkupId(true);
cells.add(AttributeAppender.append("colspan", this.findParent(DataTable.class).getColumns().size()));
this.dataTable.setOutputMarkupId(true);
cellItem.add(this.dataTable); // The DataTable with the child data
}
除了我应该清除一些代码之外,子数据永远不会呈现。有人能解释一下吗?
我建议始终使用JavaScript,即创建一个新的,然后用JS填充它。完全不要使用Wicket的
项
。
单击展开链接时,执行类似target.appendJavaScript(“yourownfunction('”+link.getmarkupid()+“‘,”+somedataasjson+“)”);
的操作。因此yourownfunction()
将使用链接id查找其最近的父级,然后使用JS可以在其后面追加新行。一旦创建了行,您就可以根据需要使用带有数据的JSON来填充它。
问题内容: 我是新来的世界,我有这样的话: 然后单击,您将被打印在控制台上。现在将行更改为: 现在点击该按钮,我希望它会被渲染。但事实并非如此。 我不确定为什么会这样。请注意,我在方法中有上面的代码。 问题答案: 您可能希望有一个状态组件,该状态组件在单击按钮之后在按钮旁边显示另一个组件。您需要做的就是跟踪按钮是否被单击:
我正在构建一个PhotoViewer,当用户按左键或右键时,它可以更改照片。我正在使用React、Redux、React router和React router Redux。当用户按下左键或右键时,我会做两件事,使用并发送一个操作来更新当前查看的照片,。我订阅状态更改以进行调试。 上面的每一行都会触发一个新的状态更改。因为我更新了,所以发送操作会更新存储,而更新url会更新存储,因为react r
我是新来的反应。作为一个学习练习,我正在构建一个国际象棋应用程序 我想根据父级中的状态更改子级的DOM。当前,在父级组件的状态变化时,子级组件没有变化。 PS:请忽略任何语法错误。这段代码是实际代码的精简。如果你想看完整的代码,请看这里
新的反应和反应路由器,使我有许多网页的工作。我在我的它看起来是这样的 我的租赁组件看起来像这样。 我要做的是创建一个名为localhost:3000/rentals的页面,它只在新页面中显示“rentals”组件中的段落。但是当我点击房屋上的租赁链接时。在jsx中,它显示“主”组件中的所有组件,包括图片、页眉和页脚组件 我尝试在路线上使用精确路径,但什么也没发生。我怎样才能做到这一点?
我试图建立一个连接4的游戏,它有一个由7列组件组成的板组件,所有包含6个空间组件。每个列的上方都有一个拖放按钮,该按钮将用于将该件拖放到列中。为了在“红色”和“黑色”玩家之间交替,我创建了一个状态“redorblue”,它返回一个布尔值。 简而言之,当单击Drop按钮时,我希望切换“redorblue”的值,以跟踪轮到谁了。我已经将onClick函数设置为setState({redorblue:!