Knockout JS:增加一个属性值

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);

Tua*_*uan 5

您需要使用observable语法来执行此操作:

model.voteUp = function(item) { item.rating(item.rating() + 1); }
Run Code Online (Sandbox Code Playgroud)