js -文本输入上的每一行的每一个表,应该只编辑该行上的字段
Knockout.js - text input on each row of foreach table, should only edit field on that row
我在这里创建了以下代码:
我已经使用knockout foreach创建了一个表。每一行都可以通过该行上的内联按钮删除。可以动态添加行,并且可以通过选择行然后使用文本框实时编辑标签。
我想做的是将一个文本框移动到多个文本框中,每一行一个单独编辑该行。谢谢你的帮助。
Viewmodel:
function Model() {
var self = this;
this.tasks = ko.observableArray();
this.container = ko.observableArray();
this.tid = ko.observable(0);
this.addTask = function(id, content, content2) {
var obj = {
id: ko.observable(id),
content: ko.observable(content),
content2: ko.observable(content2),
selected: ko.observable(false)
};
self.tid(id);
self.tasks.push(obj);
};
this.addNewTask = function() {
var obj = {
id: self.tid() + 1,
content: "New Task",
content2: "New Service",
selected: ko.observable(false)
}
self.tid(self.tid() + 1);
self.tasks.push(obj);
}
this.selectedIndex = ko.observable(0);
this.selectTask = function(task) {
self.selectedIndex(self.tasks.indexOf(task));
};
self.removeTask = function(task) {
self.tasks.remove(task)
};
};
var myModel = new Model();
myModel.addTask(1, "Task 1", "Service 1");
myModel.addTask(2, "Task 2", "Service 2");
myModel.addTask(3, "Task 3", "Service 3");
ko.applyBindings(myModel);
视图:
<div data-bind="foreach: tasks">
<table cellpadding="0" cellspacing="0">
<tr>
<td>
<label class="wrapper" data-bind="text: content, click: $root.selectTask, css: {'selected': $root.selectedIndex() === $index()}" />
</td>
<td>-</td>
<td>
<span class="wrapper" data-bind="text: content2, click: $root.selectTask, css: {'selected': $root.selectedIndex() === $index()}"></span>
</td>
<td> <input type="button" value="remove" data-bind="click: $parent.removeTask"></td>
</tr>
</table>
</div>
<br />
Add New Task: <input type="button" value="add" data-bind="click: addNewTask"><br /><br />
<label>Edit Task:</label> <input type="text" data-bind="value: tasks()[selectedIndex()].content2, valueUpdate: 'afterkeydown'">
您可以将<input>
移动到行中自己的<td>
。
当前将输入绑定到所选项;在它的新位置,你可以把它绑定到bindingContext
:
<td>
<label>Edit Task:</label> <input type="text" data-bind="value: content2, valueUpdate: 'afterkeydown'">
</td>
要在新项目上工作,你必须确保它们也获得可观察属性。(我也改变了这在更新小提琴)
https://jsfiddle.net/90w1pagr/首先,如果你想编辑你新创建的行,你必须做ko。可观察对象的值:
this.addNewTask = function() {
var obj = {
id: ko.observable(self.tid() + 1),
content: ko.observable("New Task"),
content2: ko.observable("New Service"),
selected: ko.observable(false)
} ....
然后,每行有一个文本框,替换为:
<span class="wrapper" data-bind="text: content2, click: $root.selectTask, css: {'selected': $root.selectedIndex() === $index()}"></span>
with:
<input type="text" data-bind="value: content2, valueUpdate: 'afterkeydown'">
进一步将data-bind="foreach: tasks"移动到。您将为每个任务重复行而不是表。
相关文章:
- Rad网格编辑模式通过选中复选框时的java脚本启用禁用所需的字段验证器
- 编辑不起作用的表单的特定行和重置特定字段
- 编辑图像字段javascript验证空白图像不插入
- 无法根据用户在编辑窗口中的输入显示/隐藏jtable jquery字段
- 角度变量在编辑输入字段之前不显示
- 无法在 NG 网格中行的编辑字段中移动光标
- Javascript 单击html字段值而不编辑.js文件
- 用于编辑输入字段的弹出窗口
- 一起编辑输入字段,而不是单独编辑
- x可编辑重置字段
- 可编辑文档中多个字段的本地存储
- 使用setter而不是模型字段进行角度x可编辑
- JS/jQuery中可编辑字段的可变数量
- 使用可能的字段编辑器打开新表中的引导程序表行
- Emberjs 车把内容绑定编辑字段不起作用
- 如何将光标放在 MathQuill (0.10) 字段,以便可以键入以立即进行编辑
- 根据下拉列表中的选定选项选择要隐藏/显示的字段(编辑时)
- WooCommerce Checkout字段编辑器(minDate)不工作
- 所有字段编辑的单一编辑超链接选项
- 在AngularJS中使用多个输入字段编辑带分隔符的字符串