繁体   English   中英

kickout.js从另一个视图模型初始化视图模型

[英]knockout.js initialize viewmodel from another viewmodel

这是我的代码

视图模型1

function AppViewModel() {
var self = this;
self.boardtext = ko.observable();
self.board = ko.observableArray([
    { boardname: 'Board' },
    { boardname: 'Board' },
    { boardname: 'Board' }
]);

self.addboard = function () {
    self.board.push({ boardname: self.boardtext() });
    // initialize ListModal to zero
};

self.removeboard = function () {
    self.board.remove(this);
}

}

视图模型2

 var initialData = []; 

var ListModal = function (lists) {
    var self = this;
    self.cardtext = ko.observable();
    self.lists = ko.observableArray(ko.utils.arrayMap(lists, function (list) {
        return { listname: list.listname, cardlists: ko.observableArray(list.cardlists), showRenderTimes: ko.observable(false) };
    }));



};

ko.applyBindings(new AppViewModel(), document.getElementById("container1"));
ko.applyBindings(new ListModal(initialData), document.getElementById("container2"));

一按添加板,我如何将ListModal设置为零?

如果要重新初始化listModal,请尝试将这2个视图模型包装在1个视图模型中,以便它们可以相互关联。 然后,您可以执行以下操作:

var initialData = []; 

var ListModal = function (lists) {
  var self = this;
  self.cardtext = ko.observable();
  self.lists = ko.observableArray(ko.utils.arrayMap(lists, function (list) {
    return { listname: list.listname, cardlists: ko.observableArray(list.cardlists), showRenderTimes: ko.observable(false) };
  }));
}

function AppViewModel(parent) {
  var self = this;

  // this will keep the object of ViewModel
  self.parentObject = parent;

  self.boardtext = ko.observable();
  self.board = ko.observableArray([
    { boardname: 'Board' },
    { boardname: 'Board' },
    { boardname: 'Board' }
  ]);

  self.addboard = function () {
    self.board.push({ boardname: self.boardtext() });

    // re-initialize listModal
    self.parentObject.listModal(new ListModal(initialData));
  };

  self.removeboard = function () {
    self.board.remove(this);
  };
}

function ViewModel() {
  var self = this;
  self.appViewModel = ko.observable(new AppViewModel(self));
  self.listModal = ko.observable(new ListModal(initialData));
}

// provide another div which wrap container 1 and 2 together
ko.applyBindings(new ViewModel(), document.getElementById("container1And2"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM