Knockout JS:如何动态更新<td>计数等于<th>计数
Knockout JS: How to dynamically update <td> count to equal <th> count?
信息:
我正试图通过构建一个简单的gradebook应用程序来学习Knockout的网络开发。它还处于开发的早期阶段,但我遇到了一个障碍,即在每个<tr>
中获取<td>
以匹配<th>
元素中的列。到目前为止,我添加行或头列没有问题,但当我试图更新每一行,使其具有与表标题相同的编号或列时,我会得到奇怪的行为。
请参阅此处的示例:http://jsbin.com/fehoq/2/edit
看起来我得到了新的<td>
,但我的<input>
元素丢失了,它们的空字符串值也丢失了!
注意:我使用typescript生成了javascript。我认为这不应该成为一个问题。
相关脚本:
来自我的型号:
addScore = function(score){
this.scores.push(score);
}
从我的观点模型:
updateRows = function(){
for(var i=1;i<this.students.length;i++){
while(this.students[i].scores.length<this.assignments.length){
this.students[i].addScore("");
}
}
}
注意,赋值是一个可观察到的数组;工作;对象,而学生是学生对象的可观察阵列"分数";也是属于每个学生对象的可观察数组。
编辑:
看起来我的updateRows()方法什么都没完成。我不知道该怎么称呼它。
foreach应该是父元素,因为在您的情况下这是不可能的,您应该使用注释表示法:http://jsbin.com/wideyeku/2/edit?html,js,输出
<thead>
<tr>
<th>Name</th>
<!-- ko foreach: assignments -->
<th><input data-bind="value: workName"/></th>
<!-- /ko -->
</tr>
</thead>
更新:http://jsbin.com/wideyeku/4/edit?js,控制台,输出我发现你的代码中有一些逻辑错误:
首先,this
在javascript中是可变的,所以在模型中保留对它的引用:
function StudentsViewModel() {
var self = this;
然后更正您的更新行函数:
this.updateRows = function () {
ko.utils.arrayForEach(this.students(), function(student){
while(student.scores().length < self.assignments().length){
student.scores.push("");
}
})
};
永远不要忘记observableArrays是函数,需要调用。
相关文章:
- 正在检测导航到<a name=“;最新主题”></a>
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 在<script src=“"></脚本>标签
- 等效于<script src=“;something1.json”></脚本>
- CSS/.JS问题,<ul><李>在Megamenu中
- 如何在<td></td>在Procractor中
- 显示“<script src='some.js'></脚本>"在Html文档中
- 如何将Array转换为<ul><李>以字母为标题的字母列表
- <script src=“//代码.jquery.com/jquery-1.11.1.min.js”></
- 选择<脚本></脚本>作为html正文中的纯文本
- 可折叠<UL><李>不起作用
- $.mobile.loadPage()和$(“linkBtn”).click();t负载<头部></头部&
- <脚本/>vs<脚本></脚本>webpack和angular
- Javascript/RRails-如何包装link_to而不是<a></a>在javascript
- jQuery在处理<选择><选项>
- 布局lt md已被弃用.请使用`layout gt-<xxx>`变种
- 在<%%中定义的访问变量>从<脚本></脚本>
- 页面设计<a href><按钮><输入>在JSP中
- 注入html标记<ul></ul>在我的<李></李>元素
- jQuery选择器<按钮></按钮>