Knockout.js向数组添加新项
Knockout.js adding new items to array
我在用程序将元素添加到数据表中包含的可观察数组时遇到了问题。
表中的每一行都有一个我希望影响的不同数组。
HTML如下所示:
<div class='liveExample'>
<h2>Cases</h2>
<div id='contactsList'>
<table class='contactsEditor'>
<tr>
<th>Case Number</th>
<th>Stage</th>
<th>Users</th>
<th>Ids</th>
</tr>
<tbody data-bind="foreach: appearances ">
<tr>
<td>
<input data-bind='value: caseNumber' />
</td>
<td><input data-bind='value: caseStage' /></td>
<td>
<ul data-bind="foreach: subjects">
<li style="list-style-type:none;"><label data-bind="text: Name"/></li>
</ul>
</td>
<td>
<table>
<tbody data-bind="foreach: ids">
<tr>
<td><input data-bind='value: $data' /></td>
<td><a href='#' data-bind='click: $root.removeId'>Delete</a></td>
</tr>
</tbody>
</table>
<a href='#' data-bind='click: $root.addId'>Add number</a>
</td>
</tr>
</tbody>
</table>
</div>
<p>
<button data-bind='click: save, enable:appearances().length > 0'>Save to JSON</button>
</p>
<textarea data-bind='value: lastSavedJson' rows='5' cols='60' disabled='disabled'> </textarea>
数据和JavaScript如下所示:
enter code here
var initialData = [{
"Number": "12000009",
"Stage": "Inital",
"Subjects": [{
"Name": "Andrew McAdam"},
{
"Name": "Patrick Brown"}],
"Ids": [1]},
{
"Number": "12000010",
"Stage": "Inital",
"Subjects": [{
"Name": "John Smith"}],
"Ids": [2, 3]},
{
"Number": "12000011",
"Stage": "Inital",
"Subjects": [{
"Name": "James Bonner"}],
"Ids": [4]},
{
"Number": "12000012",
"Stage": "Processed",
"Subjects": [{
"Name": "Henrik Dalgleish"}],
"Ids": [5]}]
var AppearancesModel = function(appearances) {
var self = this;
self.appearances = ko.observableArray(ko.utils.arrayMap(appearances, function(appearance) {
return {
caseNumber: appearance.Number,
caseStage: appearance.Stage,
subjects: ko.observableArray(appearance.Subjects),
ids: ko.observableArray(appearance.Ids)
};
}));
self.addId = function(appearance) {
appearance.ids.push("");
};
self.removeId = function(id) {
$.each(self.appearances(), function() {
this.ids.remove(id)
})
};
self.save = function() {
self.lastSavedJson(JSON.stringify(ko.toJS(self.appearances), null, 2));
};
self.lastSavedJson = ko.observable("")
}
ko.applyBindings(new AppearancesModel(initialData));
我遇到的问题是,在单击Add按钮并输入值后,数组中的值是空字符串(我在创建新数组元素时添加的值)。
我认为问题是,在我有值之前,我会将新项添加到数组中,但我认为它会绑定到新的inpute,所以当我执行Save函数时,新值会被反映出来。
上述JsFiddle位于http://jsfiddle.net/amcgoldrick/3h9GZ/
感谢
Andy
添加到ids
observableArray
的值是不可观察的,因此绑定只是一种方式。如果要更新observableArray
中的值,则需要使observableArray
中的元素可见。
所以不是:
self.addId = function(appearance) {
appearance.ids.push("");
};
你会有:
self.addId = function(appearance) {
appearance.ids.push({id: ko.observable("")});
};
请参阅http://jsfiddle.net/5wKjk/3/作为一个工作示例。(我没有添加映射现有id的代码,因为我只是想演示所涉及的原理,没有时间)。
相关文章:
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何在javascript上向数组的对象添加新元素
- 如何在脚本上添加新行
- 在不刷新整个网格的情况下,向Asp.net网格视图添加新行
- 可以在Javascript中添加新的关键字吗
- 在Knockout中将新项添加到对象数组
- 如何在 JavaScript 中向结构添加新项
- Knockout.js向数组添加新项
- 无法从jQuery可排序列表中删除新添加的项
- 在 JavaScript 中向 SharePoint List 添加新项
- 在ItemFileWriteStore中添加引用为_reference的新项
- AngularJS在ng repeat中的新项上添加CSS类
- AngularJS:如何添加新的POST'将项添加到$scope而不刷新页面
- 添加新项的功能
- 当以手风琴方式打开外部菜单项时,无法向第一个子菜单项添加新的颜色类
- 在添加新的依赖项后,在反应样板中出现语法错误
- 在选择标签中添加新项并使用jquery刷新它,而无需刷新整个页面
- 添加新数组项时,带有外部模板的重复angularjs指令无法正确渲染
- 克隆tr以添加新项并替换选择框
- 添加新项并从顶部Javascript切片