Knockout JS:增加一个属性值

时间:2012-03-21 18:34:53

标签: javascript jquery data-binding knockout.js

我有一个半全面的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);

2 个答案:

答案 0 :(得分:5)

您需要使用可观察的语法来执行此操作:

model.voteUp = function(item) { item.rating(item.rating() + 1); }

答案 1 :(得分:0)

不需要parseInt函数将值增加/减少1,使用++--操作数(item.rating++item.rating--)。