Knockout更新observableArray项目在UI中没有反映?

时间:2014-12-08 21:46:07

标签: javascript jquery knockout.js

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

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

这里是代码注释,我根据其他问题答案尝试了一些事情,但没有运气

这里是小提琴http://jsfiddle.net/mosta/jt6bbeq4/21/ 当点击“更改”时,它应显示第一项= 2,根据upate函数

中的行
    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);

感谢您的帮助,谢谢

2 个答案:

答案 0 :(得分:0)

设置

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

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

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

对于像mm

这样的简单可观察对象也是如此
self.images()[0].mm('2');

请参阅fiddle

答案 1 :(得分:0)

你走了:

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