Kendo UI dataBound 客户端模板中的网格隐藏控件
Kendo UI Grid hide control in client template on dataBound
我有一个 kendo 网格视图,我正在使用一个由锚标记和标签组成的客户端模板。我需要做的是在网格视图的onDatabound事件中隐藏锚标签。
这是网格
@(Html.Kendo().Grid(Model.GridView.DataSource)
.Name("grdRole")
.Columns(columns =>
{
columns.Command(command => command.Edit()).Width(110);
columns.Bound(p => p.Code);
columns.Bound(p => p.Name);
columns.Bound(p => p.Id).ClientTemplate("<a id='lnkDisplay' href='' onclick='return linkOnClick()'> Display Data</a> <label id='lblShow'> gfhfhf</label> ").Title("Data");
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Events(x =>
{
x.Edit("onEdit");
x.Save("onSave");
x.DataBound("onDataBound");
})
.ToolBar(toolBar => toolBar.Create())
.Sortable(x => x.Enabled(false))
.Scrollable(x => x.Height("auto"))
.Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
.Reorderable(reorder => reorder.Columns(true))
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(p => p.Id);
model.Field(p => p.Id).Editable(false);
})
.Read(read => read.Action("OnGridRead", "Grid"))
.Create(create => create.Action("OnGridCreate", "Grid"))
.Update(update => update.Action("OnGridUpdate", "Grid"))
)
)
这就是我尝试做的事情..
function onDataBound(e) {
var trs = this.wrapper.find('.k-grid-content tr');
trs.each(function () {
var id = this.childNodes[5].childNodes[0].hide();
});
});
它给我以下错误..
TypeError: this.childNodes[5].firstChild.hide is not a function
您在选择活动中的锚元素时采用了一种令人困惑的方式。你为什么不简化它(并保持完整 jQuery 而不是混合香草代码)?
$(this.element).find('tr td a').hide()
上面的选择器将隐藏网格中的任何锚元素,但如果有另一个锚元素,请在其中添加一个 class 要隐藏的元素,例如:
.ClientTemplate("<a id='lnkDisplay' class='hide-me-at-data-bound' href='' onclick='return linkOnClick()'> Display Data</a>
然后就这样做:
$(this.element).find('.hide-me-at-data-bound').hide()
此外,您遇到的错误是因为您无法在非 jQuery 对象上调用 jQuery 的 .hide()
。这 - 如果您的 DOM 导航正常 - 可能会工作:
$(this.childNodes[5].childNodes[0]).hide();
PS:您所有的模板锚点都具有相同的 id
,这不是一个好的做法。尽量不要在 html 文档中重复 id
。
我有一个 kendo 网格视图,我正在使用一个由锚标记和标签组成的客户端模板。我需要做的是在网格视图的onDatabound事件中隐藏锚标签。
这是网格
@(Html.Kendo().Grid(Model.GridView.DataSource)
.Name("grdRole")
.Columns(columns =>
{
columns.Command(command => command.Edit()).Width(110);
columns.Bound(p => p.Code);
columns.Bound(p => p.Name);
columns.Bound(p => p.Id).ClientTemplate("<a id='lnkDisplay' href='' onclick='return linkOnClick()'> Display Data</a> <label id='lblShow'> gfhfhf</label> ").Title("Data");
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Events(x =>
{
x.Edit("onEdit");
x.Save("onSave");
x.DataBound("onDataBound");
})
.ToolBar(toolBar => toolBar.Create())
.Sortable(x => x.Enabled(false))
.Scrollable(x => x.Height("auto"))
.Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
.Reorderable(reorder => reorder.Columns(true))
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(p => p.Id);
model.Field(p => p.Id).Editable(false);
})
.Read(read => read.Action("OnGridRead", "Grid"))
.Create(create => create.Action("OnGridCreate", "Grid"))
.Update(update => update.Action("OnGridUpdate", "Grid"))
)
)
这就是我尝试做的事情..
function onDataBound(e) {
var trs = this.wrapper.find('.k-grid-content tr');
trs.each(function () {
var id = this.childNodes[5].childNodes[0].hide();
});
});
它给我以下错误..
TypeError: this.childNodes[5].firstChild.hide is not a function
您在选择活动中的锚元素时采用了一种令人困惑的方式。你为什么不简化它(并保持完整 jQuery 而不是混合香草代码)?
$(this.element).find('tr td a').hide()
上面的选择器将隐藏网格中的任何锚元素,但如果有另一个锚元素,请在其中添加一个 class 要隐藏的元素,例如:
.ClientTemplate("<a id='lnkDisplay' class='hide-me-at-data-bound' href='' onclick='return linkOnClick()'> Display Data</a>
然后就这样做:
$(this.element).find('.hide-me-at-data-bound').hide()
此外,您遇到的错误是因为您无法在非 jQuery 对象上调用 jQuery 的 .hide()
。这 - 如果您的 DOM 导航正常 - 可能会工作:
$(this.childNodes[5].childNodes[0]).hide();
PS:您所有的模板锚点都具有相同的 id
,这不是一个好的做法。尽量不要在 html 文档中重复 id
。