【问题标题】:Can anyone tell how to attach an event handler to a hyperlink in Kendo UI Grid?谁能告诉如何将事件处理程序附加到 Kendo UI Grid 中的超链接?
【发布时间】:2013-05-09 10:23:48
【问题描述】:

我正在使用 MVVM 框架(视图/视图模型)。我在其中一个剑道网格列上有一个超链接字段。我的要求是在单击网格上的超链接时,应该调用 viewmodel 函数。我正在努力实现这一目标,但无法打电话。请为此建议任何方法。

【问题讨论】:

    标签: kendo-ui kendo-grid


    【解决方案1】:

    定义一个模板为:

    template: '<a href="\\#" onclick="SayHello(this)">Click-me</a>',
    

    然后将SayHello函数定义为:

    function SayHello(me) {
        alert("hello");
        var item = $("#grid").data("kendoGrid").dataItem($(me).closest("tr"));
        console.log("item", item);
        item.sayGoodbye();
    }
    

    注意:SayHello 必须是全局的。

    sayGoodbye 在您的模型中定义。

    这里的例子http://jsfiddle.net/OnaBai/2p3yH/

    【讨论】:

    • 因为,我使用的是 MVVM 模型。有没有办法直接调用viewmodel函数?
    • 啊,内联事件处理程序! ;^) 传统上这是一种代码味道,但我认为它与 The Easy, if not Right, Thing to do as you'll get 一样接近。否则,您必须在网格的数据绑定事件中应用事件处理程序 -- 然后在每次重新呈现您的行时继续重新应用! 真痛苦。例如,使用弹出编辑器,这意味着使用每个弹出窗口的停用事件重新应用到活动行,在edit 事件处理程序中插入类似arguments[0].container.data("kendoWindow").bind("deactivate", function () { /*stuff*/}); 的代码。希望有更好的答案:(
    • @ruffin - 没明白你的意思。我们如何在不添加内联事件处理程序的情况下实现这一点?特别是在网格有多行的情况下。
    • @SahilM。那是 6 年前,所以我不是 100% 的上下文。 Polluting the global context is usually something to avoid,但正如我之前所说,这个修复出现了,“尽可能地接近最容易做的事情”。 最好能够在 grid = $("#grid").kendoGrid({ 定义中的处理程序中定义它 (code from the fiddle),但他们不允许/公开它; Telerik uses OnaBai's strategy in their own example
    • @SahilM。我的猜测是你不能,我认为 OnaBai 的解决方案是实用的解决方案(我给了它一个 +1)。如果 Telerik 自己的代码使用全局处理程序 (it is),那么您能做的最好的事情(如果有的话)可能只是将其保存在包含 $("#grid").kendoGrid 调用 事件的子范围内处理程序。
    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多