Javascript 如何在数组中获取新的空对象
我有一个简单的应用程序,它使用了两个viewmodels和requirejs来组合它们,一切都很好,现在我被告知我需要嵌套视图模型的多个版本,所以我添加了一个数组,我的第一个项目很好,但我不确定如何添加我的子任务项目 在另一个页面上,询问用户是否要添加另一个用户,如果是这样,我需要使用Javascript 如何在数组中获取新的空对象,javascript,knockout.js,requirejs,hottowel,Javascript,Knockout.js,Requirejs,Hottowel,我有一个简单的应用程序,它使用了两个viewmodels和requirejs来组合它们,一切都很好,现在我被告知我需要嵌套视图模型的多个版本,所以我添加了一个数组,我的第一个项目很好,但我不确定如何添加我的子任务项目 在另一个页面上,询问用户是否要添加另一个用户,如果是这样,我需要使用人员数组中的新空人员对象导航回此页面 如果我使用requirejspeople.push(person)提供的对象,我将返回现有版本,而不是新版本 如果我只是在数组people.push({})中添加一个新对象,
人员
数组中的新空人员
对象导航回此页面
- 如果我使用requirejs
提供的对象,我将返回现有版本,而不是新版本people.push(person)
- 如果我只是在数组
中添加一个新对象,那么我的敲除绑定就无法工作,因为它们正在寻找不存在的值people.push({})
人进入人
这是我的视图模型和视图
基础
define(['viewmodel/person'], function (person) {
var vm = {
people: [],
peopleIndex: 0,
currentPerson: currentPerson,
};
return vm;
//#region Internal Methods
function currentPerson() {
return vm.people[vm.peopleIndex]
}
})
普通儿童
define(['services/logger', ], function (logger) {
var person = {
title: "",
firstName: "",
lastName: "",
};
return person;
})
查看
<section>
<h2 class="page-title" data-bind="text: title"></h2>
<label for="firstName">Title</label><input type="text" name="firstName" data-bind="value: currentPerson().title" />
<label for="firstName">Fisrt Name</label><input type="text" name="firstName" data-bind="value: currentPerson().fistName" />
<label for="firstName">Last Name</label><input type="text" name="firstName" data-bind="value: currentPerson().lastName" />
</section>
标题
第一个名字
姓
您需要将当前的person
对象文本更改为person
构造函数(您可能希望属性为ko.observable
,以便值的绑定工作):
然后,在需要创建新人员的viewmodel中,可以使用new
关键字创建新实例:
define(['viewmodel/person'], function (person) {
//...
people.push(new person())
}
define(['viewmodel/person'], function(person) {
//...
people.push(new person());
}
或者,如果包含以下所有属性,则可以使people.push({})
工作:
people.push({
title: ko.observable(""),
firstName: ko.observable(""),
lastName: ko.observable(""),
});
这会起作用,但会在代码中引入重复,因此我不建议使用这种方法。您需要将当前的person
对象文本更改为person
构造函数(您可能希望属性为ko.observatable
,以便值的绑定工作):
然后,在需要创建新人员的viewmodel中,可以使用new
关键字创建新实例:
define(['viewmodel/person'], function (person) {
//...
people.push(new person())
}
define(['viewmodel/person'], function(person) {
//...
people.push(new person());
}
或者,如果包含以下所有属性,则可以使people.push({})
工作:
people.push({
title: ko.observable(""),
firstName: ko.observable(""),
lastName: ko.observable(""),
});
这会起作用,但会在代码中引入重复,因此我不建议使用这种方法。您需要将当前person对象文字更改为person构造函数(您可能希望属性为ko.observable,以便值绑定工作):
然后,在需要创建新人员的viewmodel中,可以使用new关键字创建新实例:
define(['viewmodel/person'], function (person) {
//...
people.push(new person())
}
define(['viewmodel/person'], function(person) {
//...
people.push(new person());
}
或者,如果包含以下所有属性,则可以使people.push({})工作:
people.push({
title: ko.observable(""),
firstName: ko.observable(""),
lastName: ko.observable(""),
});
这会起作用,但会在代码中引入重复,因此我不建议使用这种方法您需要将当前person对象文本更改为person构造函数(您可能希望属性为ko.observable,以便值绑定工作):
然后,在需要创建新人员的viewmodel中,可以使用new关键字创建新实例:
define(['viewmodel/person'], function (person) {
//...
people.push(new person())
}
define(['viewmodel/person'], function(person) {
//...
people.push(new person());
}
或者,如果包含以下所有属性,则可以使people.push({})工作:
people.push({
title: ko.observable(""),
firstName: ko.observable(""),
lastName: ko.observable(""),
});
这会起作用,但会在代码中引入重复,因此我不建议使用这种方法谢谢,这正是我所缺少的。我没有将视图模型属性设置为可观察的,因为我认为我只需要单向数据绑定,但现在我正在使用新上下文重新访问页面,看起来knockout可能正在缓存绑定结果。重新开始读文件汉克斯,这就是我错过的。我没有将视图模型属性设置为可观察的,因为我认为我只需要单向数据绑定,但现在我正在使用新上下文重新访问页面,看起来knockout可能正在缓存绑定结果。再次开始阅读文档