Button KnockOut JS-将按钮绑定到集合中的项目

Button KnockOut JS-将按钮绑定到集合中的项目,button,binding,knockout.js,Button,Binding,Knockout.js,这是一个用语言表达的有点棘手的问题。基本上,我一直在尝试基于KnockoutJS网站中的一个示例,在KnockoutJS中构建一个购物车页面(http://knockoutjs.com/examples/cartEditor.html). 然而,我想使用jQueryUI滑块,以便可以调整购物车中每个产品的值 这一点我已经设法让工作正常,我可以添加一个产品(在这种情况下是汽车)到我的篮子和调整价值,也增加/减少价值取决于汽车是否有运动套件或是敞篷车 但是,我不想添加一个产品(“添加汽车”按钮)然

这是一个用语言表达的有点棘手的问题。基本上,我一直在尝试基于KnockoutJS网站中的一个示例,在KnockoutJS中构建一个购物车页面(http://knockoutjs.com/examples/cartEditor.html). 然而,我想使用jQueryUI滑块,以便可以调整购物车中每个产品的值

这一点我已经设法让工作正常,我可以添加一个产品(在这种情况下是汽车)到我的篮子和调整价值,也增加/减少价值取决于汽车是否有运动套件或是敞篷车

但是,我不想添加一个产品(“添加汽车”按钮)然后选择汽车类型,而是希望能够在点击按钮(如点击“添加宝马”按钮-目前没有任何作用)时将特定类型(如宝马、福特)添加到购物车中

然而,我简单的大脑无法解决如何将按钮绑定到收藏中的特定汽车上。我想我可以通过创建一个函数来检索car,该函数遍历集合并查找类型与字符串匹配的car,例如

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

因此,基本上我想知道如何将“添加BMW”按钮的单击事件绑定到集合中的特定汽车,并将其添加到我的购物车中。

如果您计划制作多个按钮,您可以创建一个函数,该函数可以创建可以接收某一汽车类型的事件处理程序

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>
添加BMW

如果您计划制作多个按钮,您可以创建一个函数,该函数可以创建事件处理程序,该事件处理程序可以接受一种车型

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>
添加BMW

嗨,杰夫,谢谢你的帮助。我有一个严重的精神障碍。嗨,杰夫,为什么self.addSpecificCarLine需要返回一个函数而self.addLine不需要呢?
addLine()
只做了一件事,它向行数组添加了一个新的
CartLine
addSpecificCarLine()
的功能稍有不同,它允许您创建一个事件处理程序,用指定的
CarType
添加一个新的
CartLine
。因此,例如,
addSpecificCarLine()
允许您根据需要动态创建各种类型的处理程序,而不是使用硬编码的处理程序来创建“BMW”行
addLine()
是事件处理程序,
addSpecificCarLine()
是事件处理程序工厂。这回答了你的问题吗?嗨,杰夫,谢谢你花时间详细解释。嗨,杰夫,谢谢你的帮助。我有一个严重的精神障碍。嗨,杰夫,为什么self.addSpecificCarLine需要返回一个函数而self.addLine不需要呢?
addLine()
只做了一件事,它向行数组添加了一个新的
CartLine
addSpecificCarLine()
的功能稍有不同,它允许您创建一个事件处理程序,用指定的
CarType
添加一个新的
CartLine
。因此,例如,
addSpecificCarLine()
允许您根据需要动态创建各种类型的处理程序,而不是使用硬编码的处理程序来创建“BMW”行
addLine()
是事件处理程序,
addSpecificCarLine()
是事件处理程序工厂。这回答了你的问题吗?嗨,杰夫,谢谢你花时间详细解释。