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

Grid value not updating on changing dropdown in Knockout JS

本文关键字:下拉列表 更新 Knockout JS 网格      更新时间:2023-09-26

请在评论部分找到更新的小提琴。

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

为了在

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

self.seats = ko.observableArray();

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

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

查看更新的小提琴

好吧,

我的答案将是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;

在这里工作小提琴

要做的事情 :

  • 无需额外编写订阅订阅下拉更改。您需要做的就是在您的情况下进一步发送正确的DD值实例。
  • 当您
  • 在 DD 订阅中填充可观察数组时,性能会受到影响,即每次下拉列表更改。这可以通过像我上面提到的那样做来避免。
  • 而是推入可观察数组推送到普通数组,然后使用该数组(性能提高) - 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(); 

有关此的更多信息,请参阅我的答案 此处 .