Javascript 带函数的敲除foreach绑定

Javascript 带函数的敲除foreach绑定,javascript,knockout.js,Javascript,Knockout.js,考虑以下代码: <div class="expandedCoverages" data-bind="foreach: $root.getGroupCoveragesPerPackage(packageCost)"> <div class="calculateCostCoverage" data-bind="html: CoverageGroupDescription()"></div> </div> </div&g

考虑以下代码:

<div class="expandedCoverages" data-bind="foreach: $root.getGroupCoveragesPerPackage(packageCost)">
  <div class="calculateCostCoverage" 
         data-bind="html: CoverageGroupDescription()"></div>
  </div>
</div>

若packageCost observable发生更改,则CoverageGroupDescription()不会更改,因为函数不会再次触发


是否有可能再次触发函数以更改foreach绑定?

在后台,这就是Knockout对直接在视图(HTML)中执行的函数/语句所做的操作:

  • 如果代码不依赖于可观察对象,则只对其进行一次评估
  • 如果代码依赖于一个可观察对象,它将创建一个计算的可观察对象,每当可观察对象发生变化时,该可观察对象将重新评估
尽管在JS模型中使用computed属性(如Sam C.的评论所示)更干净,但这并不是绝对必要的。做:

<div data-bind="foreach: myFunction(observableParam())"></div>
这意味着在这种情况下,
coverageGroupDescription
可能不会返回正确更新的数组。请参阅一个工作示例,其实现或多或少与下面的问题类似。更改packageCost,说明也会自动更改

var覆盖率=功能(成本){
本成本=可观察到的ko(成本);
this.coverageGroupDescription=函数(){
返回“This package costs”+This.cost()+“$”;
}.约束(本);
}
变量应用={
项目:ko.Array([
新承保范围(15),
新承保范围(20),
新承保范围(25),
新承保范围(30),
新承保范围(35),
]),
包装成本:可观察的ko(1),
getGroupCoveragesPerPackage:函数(m){
var m=m();
返回ko.utils.arrayMap(this.items(),函数(item,i){
返回新的保险范围(项目成本()*m);
});
}
};
ko.应用绑定(app)

全部乘以:

难道你不能用计算的可观测函数代替函数吗?前面的代码在另一个foreach循环中。我想在这个foreach中传递packageCost变量。龚:这是一个重要的问题。如果你能对你目前的结构进行分析,我们可能会帮助你找到“KO方法”。最有可能的情况是,它涉及到您正在使用的外部阵列的计算可观测值,但如果没有看到您所拥有的,则无法确定。
<div data-bind="foreach: myComputed"></div>
this.myComputed = ko.computed(function() { return myFunction(observableParam()); });