【问题标题】:Knockout JS: Increase a property valueKnockout JS:增加一个属性值
【发布时间】:2012-03-21 18:34:52
【问题描述】:

我有一个半全面的 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 绑定一样被应用(响应是我传递给视图模型的 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);

【问题讨论】:

    标签: javascript jquery data-binding knockout.js


    【解决方案1】:

    你需要使用 observable 语法来做到这一点:

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

    【讨论】:

    • 谢谢,成功了。并将 parseInt() 包裹在字符串值周围,使其工作。我认为文档没有涵盖大部分语法这很奇怪......否则我是盲人。
    • 不客气。文档提到 observables 是作为函数实现的。 knockoutjs.com/documentation/observables.html
    【解决方案2】:

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

    【讨论】:

    • 是的,当以string 的形式收到号码时,我愿意。
    猜你喜欢
    • 1970-01-01
    • 2013-05-08
    • 2018-06-04
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多