【问题标题】:Knockout update observableArray item does not reflect in UI?淘汰赛更新 observableArray 项目未反映在 UI 中?
【发布时间】:2014-12-08 21:46:07
【问题描述】:

当我的 viewModel 具有 observableArray (self.images) 并且我希望将一个项目属性 (mm) 更改为反映在 UI 上时的问题

在实际代码中,图像从服务器加载并映射到对象 DOcImage

这是代码说明,我根据其他问题的答案尝试了一些事情,但还没有运气

这里是小提琴http://jsfiddle.net/mosta/jt6bbeq4/21/ 当点击“更改”时,它应该显示第一项 = 2,根据更新功能中的行

    var DocImage = function () {
              var self = this;              
              self.mm = ko.observable('1');
    self.nn = ko.observable('1');
          };
    var viewModel = function () {
              var self = this;
            self.images = ko.observableArray([DocImage]);
              self.update = function () {
                  self.images()[0].mm = '2';
              }
          };

          var vm = new viewModel(); 
    vm.images =  [{ mm: ko.observable('1') ,nn: ko.observable('2') }, {mm:ko.observable('3'), nn:ko.observable('4')}];
ko.applyBindings(vm);

感谢您的帮助,谢谢

【问题讨论】:

  • 您可以通过使用新值作为参数调用 observable 来更改 observable 的值。您的代码正在重新分配它,这将不起作用。
  • 谢谢,同样愚蠢的 jquery 语法错误(

标签: javascript jquery knockout.js


【解决方案1】:

当你设置时

m.images =  [{ mm: ko.observable('1')  ...

你实际上用简单的数组重写了你的 observableArray。要更新可观察数组中的值,您需要使用另一种语法(参见documentation

m.images([{ mm: ko.observable('1')  ...);

对于像mm这样的简单可观察对象也是如此

self.images()[0].mm('2');

fiddle

【讨论】:

    【解决方案2】:

    给你:

    var viewModel = function () {
                  var self = this;
                self.images = ko.observableArray([DocImage]);
                  self.update = function () {
                      self.images[0].mm('2');
                  }
              };
    
              var vm = new viewModel(); 
    vm.images =  [{ mm: ko.observable('1') ,nn: ko.observable('2') }, {mm:ko.observable('3'), nn:ko.observable('4')}];
    ko.applyBindings(vm);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 2013-02-28
      • 2019-10-05
      • 1970-01-01
      相关资源
      最近更新 更多