Button KnockOut JS-将按钮绑定到集合中的项目
这是一个用语言表达的有点棘手的问题。基本上,我一直在尝试基于KnockoutJS网站中的一个示例,在KnockoutJS中构建一个购物车页面(http://knockoutjs.com/examples/cartEditor.html). 然而,我想使用jQueryUI滑块,以便可以调整购物车中每个产品的值 这一点我已经设法让工作正常,我可以添加一个产品(在这种情况下是汽车)到我的篮子和调整价值,也增加/减少价值取决于汽车是否有运动套件或是敞篷车 但是,我不想添加一个产品(“添加汽车”按钮)然后选择汽车类型,而是希望能够在点击按钮(如点击“添加宝马”按钮-目前没有任何作用)时将特定类型(如宝马、福特)添加到购物车中 然而,我简单的大脑无法解决如何将按钮绑定到收藏中的特定汽车上。我想我可以通过创建一个函数来检索car,该函数遍历集合并查找类型与字符串匹配的car,例如Button KnockOut JS-将按钮绑定到集合中的项目,button,binding,knockout.js,Button,Binding,Knockout.js,这是一个用语言表达的有点棘手的问题。基本上,我一直在尝试基于KnockoutJS网站中的一个示例,在KnockoutJS中构建一个购物车页面(http://knockoutjs.com/examples/cartEditor.html). 然而,我想使用jQueryUI滑块,以便可以调整购物车中每个产品的值 这一点我已经设法让工作正常,我可以添加一个产品(在这种情况下是汽车)到我的篮子和调整价值,也增加/减少价值取决于汽车是否有运动套件或是敞篷车 但是,我不想添加一个产品(“添加汽车”按钮)然
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()
是事件处理程序工厂。这回答了你的问题吗?嗨,杰夫,谢谢你花时间详细解释。