挖空:无法将数量变化与购物车中的总成本绑定
Knockout: Unable to bind change in quantity to total cost in shopping cart
我是Knockout JS的新手,我正在研究一个简单的购物车。用户输入物料的名称、价格和数量。
该信息输出到"购物车中的商品"区域,这是一个可观察的数组,总价显示在该区域下方。
用户可以在"购物车中的商品"区域中更改数量,但该更改不会更改总成本。
如何将"购物车中的商品"区域中的数量变化与总成本绑定?
提前谢谢你。
var viewModel = {
newItemName: ko.observable(),
newItemPrice: ko.observable(0),
newItemQuantity: ko.observable(1),
addNewItem: function() {
var newItem = {
name: this.newItemName(),
price: this.newItemPrice(),
quantity: this.newItemQuantity()
};
this.itemsInCart.push(newItem);
this.newItemName("");
this.newItemPrice(0);
this.newItemQuantity(1);
},
removeItem: function() {
viewModel.itemsInCart.remove(this);
},
itemsInCart: ko.observableArray([{
newItemQuantity()
}])
};
viewModel.addNewItemEnabled = ko.pureComputed(function()
{
var name = this.newItemName(),
price = this.newItemPrice(),
quantity = ko.observable(viewModel.newItemQuantity(1));
return name && name.length;
},
viewModel);
viewModel.getTotalCost = ko.computed(function()
{
var total = 0;
arr = viewModel.itemsInCart();
for (i = 0; i < arr.length; i++)
total += arr[i].price * arr[i].quantity;
return total;
},
viewModel);
ko.applyBindings(viewModel);
<h1>Shopping Cart</h1>
<hr />
<h3>Add New Item</h3>
<label>Name:</label>
<input type="text" data-bind="value: newItemName, valueUpdate: 'keyup'" />
<br />
<label>Unit Price:</label>
<input type="number" min="0" step="0.25" data-bind="value: newItemPrice, valueUpdate: 'keyup'" />
<br />
<label>Quantity:</label>
<input type="number" min="1" step="1" data-bind="value: newItemQuantity, valueUpdate: 'keyup'" />
<br />
<button data-bind="click: addNewItem, enable: addNewItemEnabled">Add Item</button>
<hr />
<h3>Items in Cart</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Unit Price</th>
<th>Quantity</th>
</tr>
</thead>
<tbody data-bind="foreach: itemsInCart">
<tr>
<td data-bind="text: name"></td>
<td>$<span data-bind="text: price"></span>
</td>
<td>
<input type="number" data-bind="value: quantity, valueUpdate: 'keyup'" />
</td>
<td>
<button data-bind="click: $parent.removeItem">remove</button>
</td>
</tr>
</tbody>
</table>
<h3 data-bind="visible: getTotalCost() > 0 "> Your total will be $<span data-bind="text: getTotalCost"></span></h3>
要
记住的一点:在处理Ko if something is not getting updated means it is not a observable
时
在这种情况下var newItem = {
您只是简单地分配,而您应该将值分配给可观察的,如下所示
var newItem = {
name: ko.observable(this.newItemName()),
price: ko.observable(this.newItemPrice()),
quantity: ko.observable(this.newItemQuantity())
};
修改小提琴在这里
以防万一,如果您正在寻找整洁干净的一个,最重要的是一个完整的ko
,请在此处检查此小提琴
您可以尝试查看淘汰文档的这一部分以获取指导: http://learn.knockoutjs.com/#/?tutorial=collections。
特别是,观察当每行的餐食类型发生变化时,他们如何使总附加费发生变化。 这本质上与您尝试对购物车中每件商品的数量执行的操作相同。
另外,我注意到您将视图模型设置为变量。 我通常让我的函数,像这样:
function myViewModel(){
// cool view model code here
}
然后,当您准备好应用绑定时,请执行以下操作:
ko.applyBindings(new myViewModel());
我在使用 Knockout 时注意到的一件大事是,需要非常密切地注意括号如何与可观察数组和其他可绑定模型属性一起使用。 例如,两者之间有很大的区别
this.myObservableArray().push(item);
和
this.myObservableArray.push(item);
祝你好运!
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- Telerik rad组合框多列数据绑定
- 对API数据使用声明性绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 数据绑定:'系统Char'不包含名为'xxxxx'
- react组件中的绑定方法
- 如何将ngrepeat下的ngmodel绑定到$scope
- WinJS内联绑定语法
- ng绑定和ng href问题.ng href未从控制器加载数据
- 挖空:无法将数量变化与购物车中的总成本绑定