我是kickout.js的新品牌,如果这是一个简单易懂的问题,请原谅。
我从已经包含需要计算的属性的Web服务获取JSON数据。像
这样的东西{
ValueA: 1,
ValueB: 3,
SumOfValues: 0
}
SumofValues需要是ValueA和ValueB的总和。我想使用映射插件来创建我的viewmodel,但是重写SumOfValues的创建以便计算它。当Viewmodel转换回JSON数据(用于回发到Web服务)时,我希望SumOfValues包含正确的总和。
我在这个jsfiddle中工作得很好,唯一的问题是当我更改其中一个文本框中的值时,SumofValues属性不会更新。我认为这个值会自动依赖于ValueA和ValueB,因为我在函数中引用它们。
感谢
答案 0 :(得分:3)
您需要更改SumOfValues的映射以创建计算值而不是可观察值。这是一个更新的小提琴:
和代码:
var json = {
"ValueA": 9,
"ValueB": 1,
"SumOfValues": 0
};
function myViewModel(data) {
var self = this;
var mapping = {
'SumOfValues': {
create: function (options) {
return ko.computed( function() {
return (parseInt( self.ValueA() ) + parseInt( self.ValueB() ) );
});
}
}
};
ko.mapping.fromJS(data, mapping, self);
self.isValid = ko.computed(function () {
return (self.SumOfValues() == self.ValueA() + self.ValueB() ? "equal" : "not equal");
});
}
ko.applyBindings(new myViewModel(json));
答案 1 :(得分:0)
计算的可观察量只能开箱即用。如果要更新计算的observable,则需要对其进行修改以支持读/写。详情请参阅淘汰文档中的Look at the writeable section。他们很容易实施。如果你需要一个样本小提琴告诉我,但这应该可以帮助你完成你想要的事情