Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在数组中获取新的空对象_Javascript_Knockout.js_Requirejs_Hottowel - Fatal编程技术网

Javascript 如何在数组中获取新的空对象

Javascript 如何在数组中获取新的空对象,javascript,knockout.js,requirejs,hottowel,Javascript,Knockout.js,Requirejs,Hottowel,我有一个简单的应用程序,它使用了两个viewmodels和requirejs来组合它们,一切都很好,现在我被告知我需要嵌套视图模型的多个版本,所以我添加了一个数组,我的第一个项目很好,但我不确定如何添加我的子任务项目 在另一个页面上,询问用户是否要添加另一个用户,如果是这样,我需要使用人员数组中的新空人员对象导航回此页面 如果我使用requirejspeople.push(person)提供的对象,我将返回现有版本,而不是新版本 如果我只是在数组people.push({})中添加一个新对象,

我有一个简单的应用程序,它使用了两个viewmodels和requirejs来组合它们,一切都很好,现在我被告知我需要嵌套视图模型的多个版本,所以我添加了一个数组,我的第一个项目很好,但我不确定如何添加我的子任务项目

在另一个页面上,询问用户是否要添加另一个用户,如果是这样,我需要使用
人员
数组中的新空
人员
对象导航回此页面

  • 如果我使用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可能正在缓存绑定结果。再次开始阅读文档