2016-08-31 25 views
1

我有一個簡單的複選框。它從視圖模型中獲得它自己的value屬性。點擊時,我需要將該值發回給一個函數。我怎麼做?Knockout:如何將數據綁定的輸入值傳回到點擊功能?

我試過,但

<input class="cards-view--item-checkbox pull-right" type="checkbox" 
data-bind="value: universalParcelId, click: $root.addUniversalParcelIDtoArray(value)" /> 

回答

2

click綁定的參數是,它會針對該事件運行的功能。這不是一個表達。如果您使用http://mbest.github.io/knockout.punches/,則可以使用on.click綁定來提供表達式。此外,要獲取元素的屬性,請使用$element

這裏是你如何提供一個功能:

click: function(data, event) { $root.handleClick($element.value, data, event) } 
+0

這很好。謝謝。然而,我無法獲得額外的參數,如'$ data'或'$ event'來通過使用函數包裝器。 – TetraDev

+1

我將編輯示例。 –

+0

非常好。這樣可行。我接受你的答案。我也試圖通過發送參數「true/false」來檢查輸入是否被檢查。有沒有簡單的方法來做到這一點? – TetraDev

1

這是很好覆蓋在knockout documentation的點擊綁定值沒有工作。這可以通過多種方式來處理。無論何時使用點擊式綁定,都會將數據從上下文傳遞到函數中的「this」。所以,如果「value」是當前上下文中模型的屬性,則很可能根本不需要傳遞任何內容。 (請參閱文檔中的注1)

var rootModel = function(){ 
    var self = this; 
    self.addUniversalParcelIDtoArray = function() { 
     console.log(this.value); 
    } 
} 

但是,除了當前上下文中的數據外,您可能還需要傳遞其他內容。在這種情況下,您可以使用添加附加參數的.bind函數。除了來自$ parent上下文的value屬性之外,$ data仍然將模型從當前上下文傳遞到「this」。 (見注2文檔中)

<input class="cards-view--item-checkbox pull-right" type="checkbox" 
data-bind="value: universalParcelId, click: $root.addUniversalParcelIDtoArray.bind($data, $parent.value)" /> 
+0

'$ data'通過 「不確定」 和'$家長來了。價值'是通過'$ data'通常帶來的。有些東西不適用於此。 – TetraDev

0

感謝您的答案。我必須做一點不同,才能讓值通過$ data和$ event對象加上自定義參數。我把數值超出使用event.target.value

我最終使用:

click: function(data, event) { $root.addUniversalParcelIDtoArray(data, event, 'param1', 'param2') }

這裏的addUniversalParcelIDtoArray功能:

addUniversalParcelIDtoArray: function (data, event, 'param1', 'param2') { 
    var self = monsoon.Search; 
    self.universalParcelIDArray.push(event.target.value); 
    return true; // allow the default "click" action, which is checking the box with a "check" 
}, 
相關問題