2013-06-05 121 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英寸高的線,所以唯一有意義的改變是寬度,我還會彈出一條警告,告知用戶有關看不見的改變。 –