Нахождение индекса аргумента в ObservableArray - KnockoutJS - PullRequest
0 голосов
/ 08 января 2020

Я новичок ie на Ко JS, и моя проблема в том, что я не могу достичь индекса моего массива. Я пытаюсь проверить, существует ли идентификатор товара, я увеличу количество товара в корзине. Я могу показать свой товар в корзине, но не могу найти индекс товара. Я пробовал методы indexOf, но они возвращают -1, нужна помощь в этом. Вот моя часть кода. Мои данные поступают со стороны MVC. Я пытался найти в качестве идентификатора и пытался найти в качестве Мануэля, набрав идентификатор.

function Cart(id, stock_name, stock_id, amount, unit_price, unit_price_tax, unit,
              curr_id, price, rate, product_no, pack_id, tax_rate) {
    return {
        id: ko.observable(id),
        stock_name: ko.observable(stock_name),
        stock_id: ko.observable(stock_id),
        amount: ko.observable(1),
        unit_price: ko.observable(unit_price),
        unit_price_tax: ko.observable(unit_price_tax.toFixed(2)),
        unit: ko.observable(unit),
        curr_id: ko.observable(curr_id),
        price: ko.observable(price),
        rate: ko.observable(rate),
        product_no: ko.observable(product_no),
        pack_id: ko.observable(pack_id),
        tax_rate: ko.observable(tax_rate)
    }
};

self.AddCart = function (d) {
    debugger;

    var index = self.Carts().indexOf('97454');
    var index2 = self.Carts().indexOf(97454);
    if (index !== -1) {
        self.Carts.replace(amount, amount++);
    }
    else {
        self.Carts.push(new Cart(
        d.id,
        d.stock_name,
        d.stock_id,
        d.quantity * 1,
        d.selected_price,
        d.selected_tax_price,
        d.unit,
        d.curr_id,
        d.price,
        d.rate,
        d.product_no,
        d.pack_id,
        d.tax_rate,
    ));
    console.log(self.Carts());
    console.log(self.Carts().length);
}};

1 Ответ

0 голосов
/ 08 января 2020

Использование indexOf всегда дает вам -1, потому что вы передаете ему строку (например, '97454'), в то время как ваш массив Carts является не массивом строк, а объектов.

Вы должны использовать ko.utils.arrayFirst:

ko.utils.arrayFirst(self.Carts(), function(cart) {
    return cart.id() === '97454';
})

Кстати, я думаю, вам не нужен объект с именем Carts, но CartItems.

...