javascript - 计算的可观察量不更新值

标签 javascript knockout.js

我目前正在学习如何将 knockoutJS 合并到我的项目中,但是,我遇到了一个让我困惑的问题。

我有一个简单的计算可​​观察值,它返回两个连接字符串的值。我遇到的问题是,该方法在 View 首次加载时返回正确的值,但是,如果我更新函数中使用的一个可观察量,则不会显示更新的值。

index.cshtml

@model KnockoutProjectt.Models.Register

<input type="text" data-bind="value: forename" />
<p data-bind="text: forename"></p>
<p data-bind="text: getFullName"></p>

@section Script {
  <script src="~/Scripts/scripts.js"></script>
  <script>

  var options = {
      forename: '@Html.Raw(Model.Forename)',
      surname: '@Html.Raw(Model.Surname)',
      email: '@Html.Raw(Model.Email)'
  };

  var viewModel = init(options);
  ko.applyBindings(viewModel);

  </script>
}

scripts.js

function init(options) {

  var viewModel = {
      forename: ko.observable(options.forename),
      surname: ko.observable(options.surname),
      email: ko.observable(options.email)
  }

  viewModel.getFullName = ko.computed(function () {
      return options.forename + ' ' + options.surname;
  });

  return viewModel;
}

任何帮助将不胜感激。

最佳答案

问题是计算结果是基于 options 对象上传入的原始值,而不是根据它们创建的可观察值。您只需更新它即可从可观察到的数据中工作:

viewModel.getFullName = ko.computed(function () {
    return viewModel.forename() + ' ' + viewModel.surname();
});

关于javascript - 计算的可观察量不更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31117848/

相关文章:

javascript - 无法使用 nyc/istanbul 进行代码覆盖

javascript - knockout中 "with"绑定(bind)如何实现分页

knockout.js - "Cannot read property '×' of undefined"

javascript - 带有空值的 bootstrap Typeahead 问题的自定义 knockout 绑定(bind)

javascript - 在 Canvas HTML getSeconds() 中,有没有办法让时钟运行 56 秒 56 分 28 小时?

JavaScript 事件不仅在第一个元素上

css - Border-radius with Knockout 下拉列表问题

javascript - 如何从 Typescript 模块导出 2 个项目

javascript - 使用带有 $index of v-for 的自定义指令

javascript - jQuery 鼠标事件不触发