自定义onclick函数作为Knockout SimpleGrid中的属性

时间:2013-04-25 15:46:05

标签: javascript templates knockout.js template-engine

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

我有属性“isLink”(bool)和“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"); }
    ...

然后警报显示“test”。

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

修改/更新

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

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

并在simpleGrid插件中:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

您可以根据需要添加任意数量的参数。

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