Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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 在knockout.js中添加具有多个属性的新项_Javascript_Model View Controller_Knockout.js - Fatal编程技术网

Javascript 在knockout.js中添加具有多个属性的新项

Javascript 在knockout.js中添加具有多个属性的新项,javascript,model-view-controller,knockout.js,Javascript,Model View Controller,Knockout.js,我试图在单击按钮时向可观察数组添加一个新项。我在knockout.js网站上大致遵循了以下示例: 以下是相关的HTML: <form data-bind="submit:addItem"> <input id="comment" data-bind="value:itemToAdd.comment, valueUpdate: 'afterkeydown'" /> <input type="submit" value="Save contact" /

我试图在单击按钮时向可观察数组添加一个新项。我在knockout.js网站上大致遵循了以下示例:

以下是相关的HTML:

<form data-bind="submit:addItem">
    <input id="comment" data-bind="value:itemToAdd.comment, valueUpdate: 'afterkeydown'" />
    <input type="submit" value="Save contact" />
</form>

警报始终显示“dd”,因此itemToAdd似乎没有正确绑定到文本框。有人知道我做错了什么吗?

通常你会做
itemToAdd().comment
,但当数据绑定中的属性不可观察且嵌套时,KO实际上无法正确写入

你当然可以通过做
comment
一个可观察的注释来解决这个问题,比如:。在这种情况下,如果您不想让
项成为可观察项,则不需要将其添加为可观察项

另一种选择是在绑定到
注释
之前进入
项添加的范围。在1.3中,可以将
与:itemToAdd一起使用。如果不需要额外的跨度,则可以使用无容器绑定,如:


在1.3之前,您可以使用带有
数据
参数的模板绑定来执行如下操作:

谢谢。我应该在最初的问题中提到,我也尝试了value:itemToAdd().comment。你有没有看到其他可能出错的地方?我明白了。KO在写入嵌套的不可观察对象时确实存在问题。更新的答案和一些选项,你有。感谢伟大的答案。真的帮助了我。可惜我只能投一次票:)
var viewModel = {


     contactHistory: [{comment: 'test', date: '12/12/2011'}, {comment: 'test2', date: '12/11/2011'}],

    itemToAdd: new ko.observable({ comment: 'dd', date: '' }),

    addItem: function () {
            alert(this.itemToAdd().comment);
                if (this.itemToAdd().comment != "")
                {
                    this.contactHistory.push(this.itemToAdd());
                }
            }
}