2013-06-05 71 views
3

我有一个应用程序,可以让我们的客户能够来到我们的网站,获得报价,然后再做投资回报分析等..knockout.js - 计算机或可观察

有两个部分...的“报价”部分和“回报”部分。

我正在使用淘汰赛来同步字段....所以当客户进来说他们需要一个10 x 10单位,我们引用他们$ 4,000。该值作为“成本”复制到“投资回报”表中。然后,我们扣除节能积分,投资税收抵免等......以提出“净投资”。

只要用户按照正确的方式遵循每一步,一切都能正常工作。

现在,如果用户已经在他们计划在我们的某个单位上花费了一笔钱,会发生什么?他们不知道他们需要一个10x10的单位,他们只知道他们有5,000美元的投资,并希望看看这项投资是否有良好的回报。所以,这个示例用户跳过了报价部分,只是想输入他们的假定价格并获得一些数字。

我的视图模型设置这样的:

self.height = ko.observable('<?php echo $height; ?>'), 
self.width = ko.observable('<?php echo $width; ?>'), 
/* Math simplified to remove gobbeldygook */ 
self.cost = ko.computed(function() {return (self.height() * self.width()) * 40;}), 

如何建立“成本”,使其在高度和宽度都提供自动计算,也就是通过UI编辑和多变?

非常感谢您的帮助。

回答

3

基因敲除使得可写计算的观察值变得容易。您可以提供一个读取函数,该函数在用户访问该函数时返回该值(就像您已有的函数一样),但也会提供逻辑以在写入时发生。

根据您的设置,它看起来像您希望计算成本的写入部分设置适当的高度和宽度值。

self.cost = ko.computed({ 
    read: function() { return (this.height() * this.width()) * 40; }, 
    write: function(value) { /* your logic here to set height and width */ }, 
    owner: self 
}); 

full docs are here,约30%下降:

+0

格拉西亚斯!我曾看过这样的文字:写:在文档中,但它没有凝胶。它也似乎我必须改变在“读”部分中使用的可计算为这个工作。 “返回”似乎不能从“写入”工作。 final code: 'self.cost = ko.computed({read:function(){return(this.height()* this.width())* 40;},write:function(value){w =(值/ 40)/ this.height(); this.width(w);},owner:self}),' –

+0

@Jason - 实际上。 'write'不返回任何内容。这只是执行一些逻辑。另外,它看起来并不像你正在设定任何高度 - 这是打算? –

+0

报价总是高度与宽度的乘积。高度实际上是通过字体大小×行数来计算的......所以宽度更加流畅。从一个方面来看,客户在10英寸高的地方放4条线以获得48英寸高的边缘。然后他们告诉我们它应该是4英尺宽,我们给他们一个价格。当他们改变价格时,我们仍然有4条10英寸高的线,所以唯一有意义的改变是宽度,我还会弹出一条警告,告知用户有关看不见的改变。 –