我在使用 KnockoutJS 作为框架方面还很陌生,而且我(显然)遇到了一个我无法(或者更有可能是不够熟练)找到的问题。
我有这个产品组,每个产品组都包含一系列产品。现在,我成功地显示了产品组列表和所有产品列表,没有太大问题。我想在用户左键单击包含产品的 div 时增加产品数量,并在用户右键单击包含产品的 div 时减少产品数量。
我已经正确设置了事件处理程序,因为它们被触发和处理而没有任何问题并且数量发生了变化,但我似乎无法让它反映在页面上。
标记:
<div class="viewProductGroup" data-bind="with: productGroupData">
<h2 data-bind="text: Title"></h2>
<div class="stickies" data-bind="foreach: Products">
<div data-bind="click: $root.addProduct,
event: { contextmenu: $root.removeProduct }">
<span data-bind="text: Title"></span><br />(<span data-bind="text: Quantity"></span>)</div>
</div>
</div>
JS的摘录:
function StickyExViewModel() {
var self = this;
self.productGroupData = ko.observable();
// Behaviors
self.addProduct = function (item) {
item.Quantity++;
}
self.removeProduct = function (item) {
item.Quantity--;
}
}
ko.applyBindings(new StickyExViewModel());
现在,我确定我不明白某些内容或遗漏了一些接线。你能帮忙吗?
编辑
这是从 WCF 服务获得的 JSON:
{"d":
{"__type":"ProductGroup:#Stickyex.Services",
"Created":"\/Date(1373407200000+0200)\/",
"ID":1,
"Products":[
{"__type":"Product:#Stickyex.Services","Code":"0","ID":0,"Quantity":0,"Title":"0"},
{"__type":"Product:#Stickyex.Services","Code":"1","ID":1,"Quantity":1,"Title":"1"},
{"__type":"Product:#Stickyex.Services","Code":"2","ID":2,"Quantity":2,"Title":"2"}],
"Title":"ProductGroup 1"}
}
获取 JSON 数据的代码(在 StickyExViewModel 内):
self.goToProductGroup = function(productGroup) {
$.get(serviceUrl, { ixProductGroup: productGroup.ID }, function (data) {
self.productGroupData(data.d);
});
}