2013-10-16 165 views
3

我有這樣的代碼:

<div id="menu"> 
    <ul data-bind="foreach: elements"> 
    <li> 
     <span data-bind="text:domObj().tagName +' [' + classOriginal() + ']', click: $root.elementClick"></span> 
     <ul class="menuclassitem" style="display:none" data-bind="foreach: classFixes"> 
     <li data-bind="text:$data, click:$root.classClick.bind($parent)"></li> 
     </ul> 
    </li> 
    </ul> 
</div> 

正如你所看到的,我想通過$父對象(當前項目中的「元素」陣列)的$ root.classClick函數,但實際傳遞的值是當前內部循環的$數據(當前「classFixes」數組的$數據)

有沒有人有一個想法如何使用$ parent classClick函數?

+0

您需要[parents](http://knockoutjs.com/documentation/binding-context.html)來代替。 – Stijn

+0

[knockout js將正確的參數傳遞給方法]的可能重複(http://stackoverflow.com/questions/14781824/knockout-js-passing-correct-parameter-to-method) –

+0

作爲一個註釋,當前綁定的對象將總是作爲第一個參數傳遞給函數,第二個參數是可選的,正如在引用的問題中提到的那樣,您可以添加其他參數。 –

回答

0

classClick函數中的'this'變量是$ parent。傳遞給classClick的第一個參數是$ data。 This fiddle demonstrates

ko.applyBindings({ 
elements: [ 
    { 
     classFixes : ["ab","cd"] 
    }, 
    { 
     classFixes : ["ef","gh"] 
    } 
], 
classClick : function(first) 
{ 
    alert(JSON.stringify(this)); 
    alert(JSON.stringify(first)); 
} 
});