2012-06-09 45 views
2

我在我的頁面上有此鏈接 - 對於通過第一個字母查找條目。我想將anchor標記的文本傳遞給data-bind屬性內的knockout的click事件。這可能嗎?knockout.js - 單擊綁定參數獲取事件發件人的文本

<a href="#" data-bind="click: $parent.getManageableEntries()><%= Convert.ToChar(i + 65)%></a></li> 

// here's my javascript method in my knockout view model 
function ManageEntriesViewModel() { 
    var self = this; 

    this.getManageableEntries = function(firstLetter) { 
     // i want to pass in the text of the <a> tag as the 'firstLetter' variable 
    } 
} 

回答

3

您應該在您的視圖模型中將anchor的文本作爲可觀察對象。然後,您只需訪問該可觀察對象(而不是直接訪問錨元素的文本)。這給你最大的靈活性。

我做了2個例子,因爲我不確定你是如何構建視圖模型對象的。

都工作得不錯: example-1example-2

如果你真的想在你的數據綁定屬性的第一個字母的提取,你既可以把一個匿名函數存在,或與綁定你的函數論點,就像我在this fiddle中所做的那樣。

我希望其中一種方法適合您的需求。

+1

這不是我正在尋找的內容,因爲我不希望文本內的值在我的視圖模型中顯示。理想情況下,我想直接從錨元素中讀取文本的值。 –

+1

如果您的視圖中有數據要訪問/操作您的代碼,但您不希望此數據處於視圖模型中,那麼我認爲您所尋找的不是KO功能。用點擊綁定。 (例如用jquery:[fiddle](http://jsfiddle.net/26Q7z/2/)) – antishok

1

我敢肯定,你現在找到了,萊維特,但在這裏就是你要找什麼...

見「注2:訪問事件對象,或傳遞多個參數」在這裏: http://knockoutjs.com/documentation/click-binding.html

只需通過click-bound函數傳遞add'l參數即可。不管你如何渲染,一定要包含第一個參數作爲$ data。

0

這是我工作的。在您不希望顯式「數據綁定」到視圖模型中的某些observable的HTML標記中,將一個clickchange事件分配給HTML標記。然後將您的實際功能包含在虛擬功能中,並傳入兩個參數dataevent您必須同時擁有,否則將會失敗。在我的情況下,我使用了一個改變事件。請看下圖:

HTML:

<input data-bind="event: { change:function(data, event) { $parent.SomeFunction(data, event) }}"></input>

然後在你的JavaScript功能,您可以訪問<input>的文字像這樣:

的JavaScript:

function SomeFunction(data, event) 
{ 
    var inputValue = event.currentTarget.value; 
    alert(inputValue); 
} 

因此,每個提姆e我在<input>字段中編寫文本,SomeFunction()將被調用,並將提醒我剛寫入的文本。