网格值未在 Knockout JS 中更改下拉列表时更新

Grid value not updating on changing dropdown in Knockout JS

请在评论区找到更新后的fiddle。

我已经提供了 HTML 代码和 ViewModel。在更改下拉列表中的值时,我希望更新网格中的点值。正在为新的下拉值计算点值,但 return 无法将该值绑定到网格。

为了在 dropdownAValue 上的 UI 中进行 seats 更改,您需要先声明空的可观察数组:

self.seats = ko.observableArray();

并在订阅函数中更新它,而不是每次都创建新的 observableArray

self.seats([new PipCalculation(self.rates[0], self.rates[0].price, self.rates, self.newLot[0],currentlotvalue) ]);

updated fiddle

好吧,我的回答将是对 Max Brodin 给出的内容的补充。

我们可以通过做这样的事情进一步规范你的代码

查看模型:

    self.dropdownAValue = ko.observable(0.1);

    self.seats = ko.observableArray([]);

    var newItems = ko.utils.arrayMap(self.rates,function(item){
    return new PipCalculation(item, item.price, self.rates, self.newLot[0], self.dropdownAValue)
    });
    self.seats(newItems);

    //computed code
    self.formattedPrice2 = ko.computed(function() {
           //alert("hi");
            var cur = self.rate().pair;
            //var price = self.rate().price;
            //alert(self.myQuote());
            var price = self.myQuote();
            var pip = 1;
            var lot1 =currentlotvalue().lotSize;

工作fiddlehere

要做的事情:

  • 订阅下拉变化不需要另外写订阅。您需要做的就是根据您的情况进一步发送正确的 DD 值实例。
  • 当您在 DD 订阅中填充 observablearray 时,性能会受到影响,即每次下拉列表都会发生变化。这可以通过像我上面提到的那样来避免。
  • 与其推入 Observable 数组,不如推入普通数组,然后使用该数组(性能得到改善)- max 在他的评论中提到

还有另一种方法可以做到这一点(我以前这样做过)

self.seats([]); 
var mutatedArray = self.seats();
ko.utils.arrayForEach(self.rates,function(item){
mutatedArray.push(new PipCalculation(item, item.price, self.rates, self.newLot[0],self.dropdownAValue));  // push to the array(normal array)  
});  
 self.seats.valueHasMutated(); 

有关此的更多信息,请参阅我的回答 here