0

これは、言葉で表現するのに少し難しい質問です。基本的に、KnockoutJS Webサイト(http://knockoutjs.com/examples/cartEditor.html)の例の1つに基づいて、KnockoutJSでショッピングカートページを作成しようとしています。ただし、カート内の各商品の値を調整できるように、jQueryUIスライダーを利用したかったのです。

これで問題なく動作し、バスケットに製品(この場合はモーターカー)を追加して値を調整したり、車にスポーツキットがあるかコンバーチブルかによって値を増減したりできます。

http://jsfiddle.net/FloatLeft/UjRrJ/

ただし、製品を追加して([車を追加]ボタン)、車のタイプを選択する代わりに、ボタンをクリックする(たとえば、クリックする)だけで特定のタイプ(BMW、フォードなど)をカートに追加できるようにしたいと思います。 「BMWの追加」ボタン-これは現時点では何もしません)。

しかし、私の単純な頭脳は、ボタンをコレクション内の特定の車にバインドする方法を理解できません。コレクションを反復処理して、文字列に一致するタイプの車を見つける関数を作成することで、車を取得できると思います。たとえば、

    function GetCar(carType) {
        for (var i = 0; i < sampleCars.length; i++) {
            if (sampleCars[i].Type == carType) {
                return sampleCars[i];
            }
        }
    }

つまり、基本的に、「BMWを追加」ボタンのクリックイベントをコレクション内の特定の車にバインドして、カートに追加する方法を知りたいと思います。

4

1 に答える 1

3

複数のボタンを作成する予定がある場合は、車の種類を受け取ることができるイベント ハンドラーを作成できる関数を作成できます。

self.addSpecificCarLine = function (carType) {
    return function () {
        var car = ko.utils.arrayFirst(sampleCars, function (car) {
            return car.Type === carType;
        });
        var cartLine = new CartLine();
        cartLine.car(car);
        self.lines.push(cartLine);
    };
};

次に、次のようにハンドラーにバインドできます。

<button data-bind='click: addSpecificCarLine("BMW")'>Add BMW</button>

更新されたフィドル

于 2012-10-05T18:12:10.397 に答える