无法将值推入observavblearray

时间:2015-01-28 11:16:29

标签: javascript html5 knockout.js

我无法理解为什么这个小代码不能正常工作。请帮忙! 我尝试的是将文本框值推送到数组中,然后使用绑定将其显示回来。 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>    

js脚本是:

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"]));
}        

我在JSFiddle也试过了:

http://jsfiddle.net/Rakz_1221/m3rwupmz/1/

1 个答案:

答案 0 :(得分:2)

首先,您还没有在JSFiddle演示中包含KnockoutJS,因此无论如何您的演示都无法正常工作。

您遇到的问题是您正在调用tasks.pushtasks本身并不是一个数组。 tasks是一个函数 - 一个Knockout Observable。为了将值推入其中,我们需要通过调用tasks().push()来执行此函数。

正如James Thrope评论的那样,您实际上可以致电tasks.push,对此感到抱歉!

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

我强烈建议您通过http://learn.knockoutjs.com获取KnockoutJS自己的互动教程。