【问题标题】:Not able to push values into an observavblearray无法将值推送到 observavblearray
【发布时间】:2015-03-27 06:29:33
【问题描述】:

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

【问题讨论】:

  • 您的 JSFiddle 演示中没有包含 Knockout.JS。

标签: javascript html knockout.js


【解决方案1】:

首先,您的 JSFiddle 演示中没有包含 KnockoutJS,因此您的演示无论如何都无法运行。

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

正如 James Thrope 所说,您实际上可以致电 tasks.push,对此感到抱歉!

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

我强烈建议您通过http://learn.knockoutjs.com 上提供的 KnockoutJS 自己的交互式教程。

【讨论】:

  • observableArrays have a .push method - 实际上,如果您在底层数组上调用 push,除非您事后手动触发通知,否则淘汰赛实际上不会看到更改
  • @JamesThorpe TIL!我一直在用valueHasMutated 跟进这个问题 - 我想我会检查我的最新项目并替换所有实例!
  • 如果你真的要使用 observableArray(在内部它调用 valuHasMuated),实际上不需要使用 valuHasMuatated。但我做了一些事情,比如让 observableArray 变平,稍后我会推到它,我在上面调用 valueHasMuated。你可以在这个链接stackoverflow.com/questions/9709374/…
猜你喜欢
  • 2016-12-26
  • 1970-01-01
  • 2022-08-18
  • 2018-09-04
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2012-11-23
相关资源
最近更新 更多