我有一个简单的剔除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
,但是此视图模型不包含Id
和Name
,它只是不包含任何内容。但是,当我查看调试器时,在
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/