我有一个半全面的KO设置。但到目前为止,我只使用KO来呈现数据。
现在我需要增加/减少模型的值。
这是我的模特:
SharedItem: function (data) {
var self = {};
...
self.rating = ko.observable(data.Rating);
...
return self;
}
这是我的观点
ItemsViewModel: function (json) {
var model = {};
model.shareditems = ko.observableArray();
var mappedSharedItems = [];
var parsedData = $.parseJSON(json);
$.each(parsedData, function (key, val) {
var newSharedItems = new SharedItem(val);
mappedSharedItems.push(newSharedItems);
});
//My function to vote
model.voteUp = function(item) {
item.rating += 1;
}
model.shareditems(mappedSharedItems);
return model;
}
我的视图应用得像任何标准的Knockout绑定(响应是我传递给viewmodel的ajax响应):
var viewModel = ItemsViewModel(response);
ko.applyBindings(viewModel, $('#ItemListWrapper')[0]);
但是我似乎无法弄清楚如何让我的voteUp
函数增加评分数。
重要说明: rating
值是来自服务器的字符串。但我想我可以在其上使用parseInt
。
有人能指出如何让这个函数增加模型属性的值吗?
提前致谢
编辑:如果您想在此处查看我称之为voteUp
的HTML,请执行以下操作:
<div class="Vote">
<a href="#" data-bind="click: $parent.voteUp">+1</a>
</div>
编辑2:我的解决方案:
item.rating(parseInt(item.rating()) + 1);
答案 0 :(得分:5)
您需要使用可观察的语法来执行此操作:
model.voteUp = function(item) { item.rating(item.rating() + 1); }
答案 1 :(得分:0)
不需要parseInt
函数将值增加/减少1,使用++
或--
操作数(item.rating++
或item.rating--
)。