2017-05-26 57 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())