【问题标题】:Computed observable not updating value计算的 observable 不更新值
【发布时间】:2015-06-30 00:46:47
【问题描述】:

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

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

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;
}

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    问题是计算是基于在options 对象上传递的原始值,而不是从它们创建的 observables。你只需要更新它就可以从 observables 工作:

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

    【讨论】:

      猜你喜欢
      • 2015-10-02
      • 2016-11-03
      • 2019-06-02
      • 2017-01-16
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      相关资源
      最近更新 更多