【发布时间】:2018-08-13 21:19:33
【问题描述】:
目标:绑定详细网格的自定义工具栏操作,将父行的 id 传递给客户端脚本。
主从网格
每个主行都有 0-many 详细信息,在展开行时显示。详细信息是使用 kendo 的客户端模板绑定到父行的另一个网格。
主网格
@(Html.Kendo().Grid<ConfigurationRuleViewModel>()
.Name("configurationRuleGrid")
.Columns(columns =>
...)
// detail grid
.ClientDetailTemplateId("configRuleDetailTemplate")
)
详细视图模型
ConfigurationId是每行需要绑定并传递给子网格的添加按钮onclick事件的属性。
public class RuleViewModel
{
public long Id { get; set; }
[Required]
public int ConfigurationId { get; set; }
...
}
细节网格(剑道客户端模板)
<script id="configRuleDetailTemplate" type="text/kendo-template">
@(Html.Kendo().Grid<RuleViewModel>()
.Name("grid_#=Id#")
.Columns(columns =>
...
)//
.ToolBar(commands =>
commands.Template("<a class='btnNewRule k-button k-button-icontext' onclick='loadNewRule(\\#=ConfigurationId \\#)' title='Add new rule'></span>Add</a>"))
...
.DataSource(dataSource => dataSource
...
)
.ToClientTemplate())
</script>
我尝试了什么
-
单独使用 document.ready 事件绑定到按钮
//尝试1(尝试了许多不同的选择器,结果相同) var addBtns = $("a.btnNewRule");
// 找不到按钮 if($.isArray(addBtns)) { $(addBtns).each(函数(_, btn){ btn.on("点击",function () { 加载新规则(这个); }); }); }
//尝试2 // 从网格上下文中查找,工具栏 // 仍然找不到按钮 ruleGrid.find(".k-grid-toolbar").on("click", ".btnNewRule", function (e) { 加载新规则(e); });
在开发控制台中测试选择器显示元素当时不可用,因此唯一的选项似乎是使用自定义工具栏绑定在详细信息网格中 - 呈现竞争条件。
-
当前实现:尝试使用 viewmodel 属性
ConfigurationId绑定点击事件onclick='loadNewRule(\#=ConfigurationId \#)'
但是,语法是假的,会产生一个[预期的]错误:
Uncaught SyntaxError: Invalid or unexpected token
在客户端模板中绑定属性的正确方法是什么。
注意:客户端模板使用内联编辑,但添加将使用带有自定义编辑器的弹出窗口,因此需要绑定为尝试。
对实现目标的不同方式持开放态度。
【问题讨论】:
标签: asp.net-mvc telerik kendo-grid