Knockout JS:如何动态更新count到相等的数量?

时间:2014-04-18 00:07:30

标签: javascript html knockout.js typescript ko.observablearray

的信息:

我试图通过构建一个简单的成绩簿应用程序来学习使用Knockout进行Web开发。它还处于早期开发阶段,但我已经在每个<td>中获取<tr>以匹配<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("");
        }
    }
}

请注意,作业是一个可观察的数组&#34; work&#34;对象和学生是一组可观察的学生对象。 &#34;比分&#34;也是属于每个学生对象的可观察数组。

编辑:

看起来我的updateRows()方法完全没有任何成就。我不知道在哪里打电话。

1 个答案:

答案 0 :(得分:1)

foreach应该是父元素,因为在您的情况下,您不应该使用注释表示法:http://jsbin.com/wideyeku/2/edit?html,js,output

<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,console,output 我发现你的代码中有一些逻辑错误:

首先,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是函数,需要调用。