在对可观察数组中的项目进行更改后,如何立即看到更新?

How do I instantly see an update after making changes to an item in an observable array?

我正在尝试编辑 table 单元格的内容,我不想直接在 table 中编辑值,而是需要使用文本区域,输入一些文本并点击按钮更新 table 单元格。

我尝试使用 JQuery 执行此操作并直接更新 Observable Array,但是,在 Select 选项项之间切换之前我看不到更改。

这里有一个上面提到的JSFiddle showing the complete example

我该如何编写才能在对 Observable 数组项进行更改后立即看到更改?

您的简历 属性 无法观察到,因此它没有更新。我做了一些小改动,让您的 Bio 可见,因此在您单击按钮时更新,而不是在您重新加载艺术家时更新 https://jsfiddle.net/jpntrx41/。变化在以下几个方面:

self.artistDetail = ko.observableArray([{
    "ArtistId": "1",
    "Bio": ko.observable("Jon Secada is a Cuban American singer and songwriter. " +
      "Secada was born in Havana, Cuba, and raised in Hialeah, Florida. " +
      "He has won two Grammy Awards and sold 20 million albums since his " +
      "English-language debut album in 1992")
  },

  {
    "ArtistId": "2",
    "Bio": ko.observable("Céline Marie Claudette Dion, CC OQ ChLD is a Canadian " +
      "singer, songwriter, businesswoman and occasional actress.")
  }
]);


$(function() {
  $('#update').click(function(event) {
    var updateText = $('#update-bio').val();

    if (viewModelA.SelectedArtist()) {

      var currText = viewModelB.artistDetail()[viewModelA.SelectedArtist().value - 1].Bio();

      viewModelB.artistDetail()[viewModelA.SelectedArtist().value - 1].Bio().replace(currText,
        viewModelB.artistDetail()[viewModelA.SelectedArtist().value - 1].Bio(updateText));
    }
  });
});

虽然上面满足了当你点击按钮时自动更新 Bio 的要求,但我对你的代码结构以及 Knockout 和 jQuery 的混合感到有点困惑。显然,我不知道你正在尝试做什么的大局,但值得审查你的结构,看看你是否可以稍微简化它。

这是一个非常快速的工作示例运行全部来自 1 个带有 Knockout 的视图模型http://plnkr.co/edit/3UYAQjJmbdyn1rYxZj9m?p=preview