2017-05-26 56 views
0

我需要從ViewModel中使用位於視圖/頁面中的循環中的對象的值來獲取值。IF語句中的敲除綁定函數

<!-- ko foreach: ExtendedItems() --> 
<tr> 
    <!-- ko foreach: PriceGroups() --> 
    <!-- ko if: DeductibleAmount() === $root.FindDeductibleValue($parent.Provider()) --> 
    <td> --Content-- </td> 
    <!-- /ko --> 
    <!-- /ko --> 
</tr> 
<!-- /ko --> 

我在視圖模型的功能是找到正確的值:

self.FindDeductibleValue = function (provider) {     
    return self.SelectedDeductibles.findObs('Provider', { Provider: provider }).Value();    
} 

此功能工作正常,當我把它從視圖模型,但我得到「無法讀取的特性‘值’ null在viewModel.self.FindDeductibleValue「當我嘗試在IF語句中的視圖/頁面中使用它。

我用一個數字替換了$parent.Provider()以確保$parent.Provider()不爲空,但它不會更改我收到的錯誤。

這樣就不可能在IF語句中使用函數嗎?

+0

哎呀!實際上,這是有效的......在我嘗試綁定數據之前,我需要填寫「SelectedDeductibles」。我在ViewModel中試圖使用函數的地方,它已經被填充了,但是當我試圖在視圖/頁面中的IF語句中綁定它時,它還沒有被填充。 –

回答

0

這裏的問題是「綁定上下文」。夫婦的事情雖然首先。

編輯:

我只注意到FindDeductibleValue()接收比當前迭代項目的其它 的東西,像淘汰賽的方式自動執行 。其中的代碼似乎有點奇怪。你能否 請發佈你正在使用的全視圖模型?我不是 確信有足夠的上下文在這裏正確回答問題。

  1. 我會用$parents陣列不$root的情況下,深度或圖案都沒有改變。

  2. 你不需要在你的綁定中調用你的observables,淘汰賽會爲你做到這一點。 <!-- ko foreach: ExtendedItems -->而不是<!-- ko foreach: ExtendedItems() -->

  3. 您遇到的主要錯誤是綁定上下文問題,因此從循環內調用方法時,您基本上處於viewmodel的子上下文中。不幸的是,JavaScript不能告訴你這一點。但它告訴你這個問題。子項目沒有Value屬性。爲了解決這個問題,你需要綁定到正確的上下文我相信代碼將是: $parents[0].FindDeductibleValue.bind(null, $parent.Provider())