Kri*_*anB 0 javascript data-binding jquery knockout.js
我有一个半全面的KO设置.但到目前为止,我只使用KO来呈现数据.
现在我需要增加/减少模型的值.
这是我的模型:
SharedItem: function (data) {
var self = {};
...
self.rating = ko.observable(data.Rating);
...
return self;
}
Run Code Online (Sandbox Code Playgroud)
这是我的观点
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;
}
Run Code Online (Sandbox Code Playgroud)
并且我的视图像任何标准的Knockout绑定一样应用(响应是我传递给viewmodel的ajax响应):
var viewModel = ItemsViewModel(response);
ko.applyBindings(viewModel, $('#ItemListWrapper')[0]);
Run Code Online (Sandbox Code Playgroud)
但我似乎无法弄清楚如何使我的voteUp功能增加评级号.
重要提示:该rating值是来自服务器的字符串.但我想我可以只使用parseInt它.
任何人都可以指出我的方向如何使这个功能增加模型属性的值?
提前致谢
编辑:如果你想看到我voteUp在这里调用的HTML,它是:
<div class="Vote">
<a href="#" data-bind="click: $parent.voteUp">+1</a>
</div>
Run Code Online (Sandbox Code Playgroud)
编辑2:我的解决方案:
item.rating(parseInt(item.rating()) + 1);
您需要使用observable语法来执行此操作:
model.voteUp = function(item) { item.rating(item.rating() + 1); }
Run Code Online (Sandbox Code Playgroud)