Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.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 无法将值推送到observablearray中_Javascript_Html_Knockout.js - Fatal编程技术网

Javascript 无法将值推送到observablearray中

Javascript 无法将值推送到observablearray中,javascript,html,knockout.js,Javascript,Html,Knockout.js,我无法理解为什么这个小代码不能正常工作。请帮助! 我所做的只是将textbox值推送到数组中,然后使用绑定将其显示回来。 HTML代码是: <div> Add Task:<input type="text" placeholder="abcd" data-bind="value:viewModel.newTask"/> <input type="button" value="add" data-bind="click:viewModel.addTask"

我无法理解为什么这个小代码不能正常工作。请帮助! 我所做的只是将textbox值推送到数组中,然后使用绑定将其显示回来。 HTML代码是:

<div>
Add Task:<input type="text"  placeholder="abcd" data-bind="value:viewModel.newTask"/>
    <input type="button" value="add"  data-bind="click:viewModel.addTask" />
</div>

<div data-bind="foreach:viewModel.tasks" ></div>    
我在JSFIDLE中也尝试过:


首先,您的JSFIDLE演示中没有包含KnockoutJS,因此您的演示无论如何都无法工作

您遇到的问题是您正在调用
任务。按
<代码>任务
本身不是数组<代码>任务
是一个函数-可以观察到的淘汰。为了将值推入其中,我们需要通过调用
tasks().push()
来执行此函数

正如James Thrope所评论的,您实际上可以调用
任务。按
,对此表示抱歉

最后,您的
ko.applyBindings(…)
永远不会被调用,因为它包含在您的
viewModel
函数中—您在任何时候都不会调用它


我强烈建议您阅读KnockoutJS的互动教程,该教程位于。

您的JSFIDLE演示中没有包含Knockout.JS。-实际上,如果在底层数组上调用
push
,除非手动触发通知,否则knockout实际上不会看到更改afterwards@JamesThorpe直到!我一直在用一个
值hassmutated
-我想我会检查我的最新项目,并替换所有的实例!事实上,如果您真的要使用ObservaleArray(内部称为valuHasMuated),则无需使用
valuHasMuated
。但我会做一些事情,比如我把耳环放平,然后我会把它推到后面,我称之为valueHasMuated。你可以从我在这个链接中的回答中找到我要说的
var viewModel = function (items) {
var self = this;

self.newTask = ko.observable();
self.tasks = ko.observableArray(items);

self.addTask = function () {
    self.tasks().push(self.newTask());
    self.newTask(" ");

} 

ko.applyBindings(viewModel(["alpha","beta","gamma"]));
}