2013-04-25 19 views
1

我想在數據中顯示一個值作爲鏈接,並將自定義函數傳遞給它的單擊事件(最終將顯示模態w /狀態歷史記錄)。作爲Knockout SimpleGrid中屬性的自定義onclick函數

我有屬性 「isLink」(布爾)和 「點擊」(功能),它可以像下面:

{ 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"); } 
    ... 

然後警報顯示「測試」。

所以我想我的問題是,我如何訪問該功能的數據?

編輯/ UPDATE

我能得到它的工作。綁定文檔的鏈接有所幫助。這裏是工作代碼:

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

,並在simpleGrid插件:

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

感謝您的幫助!

回答

0

你必須使用bind來有效地附加你想要的任何參數給你的函數調用。

在您的例子,它應該工作方式如下:

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

綁定函數的第一個參數是「onClick」函數中的上下文。我選擇了「數據」,這意味着在「onClick」中,$ data的所有屬性都可用。

您可以根據需要添加任意數量的參數。

最後一個注意事項:我建議刪除href屬性,這是不需要的,在這裏沒有任何成就。

+0

感謝您的幫助。但是,如果我這樣做,我仍然會「不確定」。我使用IE8的事實(不幸的是)與我有什麼關係? – user1147941 2013-04-25 18:37:53

+0

沒問題。我有IE8在工作,我可以向你保證,「綁定」的作品。你可能有另一個問題。如果你可以設置一個有你所擁有的jsfiddle我可以幫助你更多。 – Jalayn 2013-04-25 18:47:27

+0

爲了演示一個例子,我需要能夠修改/包含jsfiddle中的simpleGrid插件,這是我無法做到的。 – user1147941 2013-04-26 13:59:25