【问题标题】:knockout.js - Computed or observableknockout.js - 计算的或可观察的
【发布时间】:2013-06-06 01:14:07
【问题描述】:

我有一个应用程序,它允许我们的客户访问我们的网站,获取报价,然后进行投资回报分析等......

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

我正在使用淘汰赛来同步字段....因此,当客户进来并说他们需要 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 进行编辑和更改?

非常感谢您的帮助。

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    Knockout 使用可写的计算 observable 让这一切变得简单。您可以提供一个读取函数,该函数在用户访问它时返回该值,就像您已经拥有的一样,但还提供了在值写入时发生的逻辑。

    根据您的设置,您似乎希望计算成本的写入部分以设置适当的高度和宽度值。

    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%:

    【讨论】:

    • 谢谢!我在文档中看到了 read: write: ,但它只是没有凝胶。看来我必须更改“读取”部分中使用的可计算项才能正常工作。 “return”似乎不适用于“write”。最终代码:self.cost = ko.computed({read: function () { return (this.height() * this.width()) * 40; }, write: function(value) { w = (value / 40) / this.height(); this.width(w); }, owner: self}),
    • @Jason - 确实如此。 write 不返回任何内容。这只是一些要执行的逻辑。此外,您似乎没有为高度设置任何内容 - 这是故意的吗?
    • 报价始终是高度与宽度的乘积。高度实际上是通过字体大小 X 行数来计算的......所以宽度更加流畅。以一种方式接近它,客户在 10" 高处放置 4 行以获得 48" 的高度和边距。然后他们告诉我们它应该是 4 英尺宽,我们给了他们一个价格。当他们改变价格时,我们仍然有 10 英寸高的 4 行,所以唯一有意义的改变是宽度。我还会弹出一个警报,告诉用户看不见的变化。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多