【问题标题】:Custom onclick function as property in Knockout SimpleGrid自定义 onclick 函数作为 Knockout SimpleGrid 中的属性
【发布时间】:2013-04-25 15:46:04
【问题描述】:

我想在数据中显示一个值作为链接,并将自定义函数传递给它的点击事件(最终将显示带有状态历史记录的模式)。

我有属性“isLink”(布尔)和“onClick”(函数),它们看起来像下面这样:

    { headerText: "ColumnName"
      , rowText: function (item) { return item.Product.ProductID.toString(); }
      , isLink: true
      , onClick: function (item) { alert(item.Product.ProductID.toString()); }
    }

在“ko_simpleGrid_grid”模板中,我有以下内容:

    ...
    <a data-bind=\"attr: { href: 'javascript:void()' }, click: $data.onClick, text: rowText($parent) \" />
    ...

单击时,警报为“未定义”。如果我说:

    ...
    , onClick: function () { alert("test"); }
    ...

然后警报显示“测试”。

所以我想我的问题是,如何从该函数访问数据?

编辑/更新

我能够让它工作。绑定文档的链接有所帮助。这是工作代码:

    ...
    , onClick: function() { alert(this.Product.ProductID.toString()); }
    ...

在 simpleGrid 插件中:

    ...
    <a data-bind=\"click: $data.onClick.bind($parent), text: rowText($parent) \" />
    ...

感谢您的帮助!

【问题讨论】:

    标签: javascript templates knockout.js template-engine


    【解决方案1】:

    您必须使用bind 有效地将您想要的任何参数附加到您的函数调用中。

    在您的示例中,它应该按以下方式工作:

    <a data-bind=\"click: $data.onClick.bind($data, param1), text: rowText($parent) \" />
    

    绑定函数的第一个参数是“onClick”函数中的上下文。我选择了“data”,这意味着在“onClick”中,$data 的所有属性都可用。

    您可以添加任意数量的参数。

    最后一点:我建议删除 href 属性,它不是必需的,也不会在这里完成任何事情。

    【讨论】:

    • 感谢您的帮助。不过,如果我这样做,我仍然会得到“未定义”。我使用 IE8(不幸的是,必须)这一事实与它有什么关系吗?
    • 没问题。我有 IE8 在工作,我可以向你保证“绑定”是有效的。你可能还有另一个问题。如果你能用你拥有的东西建立一个 jsfiddle,我可以帮助你更多。
    • 举个例子,我需要能够在 jsfiddle 中修改/包含 simpleGrid 插件,这是我无法做到的......
    • 刚刚更新了问题。你为我指明了正确的方向。谢谢。
    • 不错!玩 Knockout 玩得开心 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多