【问题标题】:Can computed be an observable too in KnockoutJS在 KnockoutJS 中也可以计算为 observable
【发布时间】:2014-10-23 18:38:12
【问题描述】:

我有名字和姓氏作为可观察的,计算用户名。是否可以让用户名也可观察?

【问题讨论】:

  • 计算的已经是可观察的了。你到底想做什么?
  • 好的,我正在根据名字和姓氏计算用户名。那是绑定到文本框的数据。如果我编辑文本框,它不会更新计算。
  • Knockout 需要知道如何获取该值并将其划分到组成它的变量中。为此,您需要有一个 write 函数,该函数描述了如何从一个输入值转换为多个可观察值。通过演示查看我的答案的更新。

标签: knockout.js knockout-2.0 knockout-validation


【解决方案1】:

在 Knockout 中计算的 A 已经是 observable 的一种。如果您想要设置计算的值,那么您可以使用readwrite 属性进行设置。

这是一个非常粗略的设置名字和姓氏的例子:

var fn = ko.observable("Jimbo");
var ln = ko.observable("Jangles");

var vm = {
    myComputed : ko.computed({
        read: function () { return fn() + " " + ln(); },
        write: function (value) {
            var pieces = value.split(" ");
            fn(pieces[0]);
            ln(pieces[pieces.length -1]);
        }
    })
};

这是一个工作示例:http://jsfiddle.net/xxkLs0p8/

【讨论】:

  • 感谢快速工作示例。非常感谢。问题是更改用户名不应该更新其他 observable。简而言之 - 更改计算不应影响其他可观察的值。例如绑定到相同计算的两个文本框数据。更新一个文本框中的值应该更新另一个文本框中的值。
  • 在这种情况下,您只需更新一个单独的变量并检查它是否在读取中未定义。像这样的东西:jsfiddle.net/xxkLs0p8/2
  • fullName 只需要变成一个 observable:jsfiddle.net/xxkLs0p8/5
  • 太棒了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2014-02-27
  • 2014-07-03
  • 2016-11-03
  • 2017-05-27
  • 2012-04-23
相关资源
最近更新 更多