首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据复选框添加2个数字,然后减去数字

根据复选框添加2个数字,然后减去数字
EN

Stack Overflow用户
提问于 2011-11-10 22:19:17
回答 2查看 1.1K关注 0票数 0

下面是我要做的jsfiddle:

http://jsfiddle.net/5MxwV/1/

我有点被卡住了,因为我发现你不能输入一个依赖的可观察对象并让它更新。基本上你有两个数字。你把它们加在一起,4+5= 9。现在,当你点击一个复选框(或者如果没有复选框也可以做到),你禁用第二个数字(5),并允许输入最后一个数字(9)。所以你可以在最后一个框中输入9的位置,公式中的数字是9-4,这会给你第二个数字。所以你可以把9改成10,结果是10 -4= 6。

代码语言:javascript
复制
   // Here's my data model
var viewModel = { 
    firstNum : ko.observable(4),
    lastNum : ko.observable(5),
    reverse : ko.observable(false)
};
viewModel.add = ko.dependentObservable(function () {

    return parseInt(viewModel.firstNum()) + parseInt(viewModel.lastNum()); 
});

ko.applyBindings(viewModel); // This makes Knockout get to work



  <p>First Number: <input data-bind="value:
 firstNum , valueUpdate:'afterkeydown'" /></p>
<p>Next Number <input data-bind="value: lastNum, valueUpdate:'afterkeydown', disable : reverse" /></p>
<p>Last Number:<input data-bind="value: add, valueUpdate:'afterkeydown', enable : reverse" /></p>

<p>Subtract : <input type="checkbox"  data-bind="checked: reverse" ></p>

<br />
<p data-bind="text: ko.toJSON(viewModel)"></p>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-11 00:18:13

在这种情况下,您需要考虑使用writeable dependentObservable

它可能看起来像这样:

代码语言:javascript
复制
viewModel.add = ko.dependentObservable({
    read: function() {
       return parseInt(this.firstNum(), 10) + parseInt(this.lastNum(), 10)
    },
    write: function(newValue) {
       this.lastNum(parseInt(newValue, 10) - parseInt(this.firstNum(), 10));
    },
    owner: viewModel
});

因此,我们的想法是,read函数返回值,write函数截获写操作,并允许您反转逻辑并更新相应的可观察对象。

http://jsfiddle.net/rniemeyer/jsZde/

票数 2
EN

Stack Overflow用户

发布于 2011-11-10 23:10:11

您的dependentObservable配置不正确。您必须将视图模型本身作为参数进行传递。然后在dependentObservalbe中,使用"this“来引用视图模型。

我已经在http://jsfiddle.net/photo_tom/5MxwV/2/更新了小提琴

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8080905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档