2012-03-21 106 views
0

我有一个半全面的KO设置。但到目前为止,我只使用KO来呈现数据。Knockout JS:增加属性值

现在我需要增加/减少模型上的值。

这里是我的模型:

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

而我的观点是应用就像任何标准的淘汰赛结合(反应是我的Ajax响应,我传递给视图模型):

var viewModel = ItemsViewModel(response); 
ko.applyBindings(viewModel, $('#ItemListWrapper')[0]); 

我似乎无法FIGUR e出如何使我的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);

回答

4

您需要使用observabl Ë语法来做到这一点:

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

谢谢你,这个伎俩。并且围绕字符串值包装'parseInt(),使它工作。我觉得很奇怪,文档没有涵盖很多语法......否则我是盲目的。 – KristianB 2012-03-21 18:54:25

+0

不客气。文件提到可观察量是作为功能实现的。 http://knockoutjs.com/documentation/observables.html – Tuan 2012-03-21 18:57:01

+0

嗯,我是盲人;) – KristianB 2012-03-21 18:59:06

0

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

+0

是的,我这样做,当收到的数字是'字符串'的形式。 – KristianB 2012-03-29 15:20:25