我有一个简单的剔除viewmodel:

function HumanViewModel(humanViewModel) {
  if (humanViewModel=== undefined || humanViewModel=== null) {
    humanViewModel= {};
  }

  var self = this;

  var Id = humanViewModel.Id || '';
  var Name = humanViewModel.Name || '';
}


我正在从服务器获取一些json数据,以填充此模型,这就是成功的原因:

 var result = [];
      for (var i = 0; i < receivedData.length; i++) {
        var vm = new HumanViewModel({ Id: receivedData[i].Id, Name: receivedData[i].Name });
        result.push(vm);
      }
      self.Humans.push.apply(self.Humans, result);


问题在这里:var vm = new HumanViewModel({ Id: receivedData[i].Id, Name: receivedData[i].Name });。变量vm包含HumanViewModel,但是此视图模型不包含IdName,它只是不包含任何内容。

但是,当我查看调试器时,在HumanViewModel内一切正常,但最后,vm不包含任何内容。

我不知道丢失了哪些数据。我怎么解决这个问题?

最佳答案

不应将ID和名称存储在变量中,而应将其保存在函数上下文中。

下面的代码应该工作:

function HumanViewModel(humanViewModel) {
  if (humanViewModel=== undefined || humanViewModel=== null) {
    humanViewModel= {};
  }

  var self = this;

  this.Id = humanViewModel.Id || '';
  this.Name = humanViewModel.Name || '';
}


每次调用new HumanViewModel时,都会得到一个HumanViewModel,其ID和名称是您希望的,因为您使用this对其进行了设置,而在此范围内引用了HumanViewModel。

关于javascript - 创建新函数会在Javascript和Knockout中将其返回为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40870549/

10-12 21:56