Javascript Knockout JS:绑定动态行

Javascript Knockout JS:绑定动态行,javascript,jquery,dynamic,knockout.js,observable,Javascript,Jquery,Dynamic,Knockout.js,Observable,我在绑定动态创建的dom元素时遇到了一些问题 代码: 此代码也在$中。每个(data.info,function(index,element){} 我想要像这样的东西 Var i=0; $.each(data.info, function(index, element) { function AppViewModel() { this.eng+i = ko.observable(element.English); this.jap+i = ko.observab

我在绑定动态创建的dom元素时遇到了一些问题

代码:

此代码也在
$中。每个(data.info,function(index,element){}

我想要像这样的东西

Var i=0;
$.each(data.info, function(index, element) {

function AppViewModel() {
        this.eng+i = ko.observable(element.English);
        this.jap+i = ko.observable(element.Japanese);
        this.cal+i = ko.observable(element.Calculus);
        this.geo+i = ko.observable(element.Geometry);

        this.total+i = ko.computed(function() {
        var tot=parseFloat(this.eng()) + parseFloat(this.jap()) + parseFloat(this.cal()) + parseFloat(this.geo());
        return (tot);    
        }, this);

    }
i++;
}
获取我的结果
this.eng0=ko.observable()


注意:数据是从一个JSON对象获得的。我只包含了迭代路径。我是否可以建议使用a可能比使用jQuery的
每个
并自己生成HTML更好?我建议将您的视图模型更改为类似以下内容:

function AppViewModel() {
   this.items = ko.observableArray();
}

function ItemViewModel(element) {
    this.eng = ko.observable(element.English);
    this.jap = ko.observable(element.Japanese);
    this.cal = ko.observable(element.Calculus);
    this.geo = ko.observable(element.Geometry);

    this.name = ko.observable(element.name);
    this.major = ko.observable(element.major);
    this.sex = ko.observable(element.sex);

    this.total = ko.computed(function () {
        var tot = parseFloat(this.eng()) + parseFloat(this.jap()) + parseFloat(this.cal()) + parseFloat(this.geo());
        return (tot);
    }, this);

};
<table>
    <tbody data-bind="foreach: items">
    <tr>
        <td data-bind="text: name"></td>
        <td data-bind="text: major"></td>
        <td data-bind="text: sex"></td>
        <td><input data-bind='value: eng' /></td>
        <td><input data-bind='value: jap' /></td>
        <td><input data-bind='value: cal' /></td>
        <td><input data-bind='value: geo' /></td>
        <td><strong data-bind='text: total' /></td>
    </tr>
    </tbody>
</table>
这里,AppViewModel是元素列表的容器,每个元素都是自己的ItemViewModel,具有您似乎拥有的属性

绑定此文件的html如下所示:

function AppViewModel() {
   this.items = ko.observableArray();
}

function ItemViewModel(element) {
    this.eng = ko.observable(element.English);
    this.jap = ko.observable(element.Japanese);
    this.cal = ko.observable(element.Calculus);
    this.geo = ko.observable(element.Geometry);

    this.name = ko.observable(element.name);
    this.major = ko.observable(element.major);
    this.sex = ko.observable(element.sex);

    this.total = ko.computed(function () {
        var tot = parseFloat(this.eng()) + parseFloat(this.jap()) + parseFloat(this.cal()) + parseFloat(this.geo());
        return (tot);
    }, this);

};
<table>
    <tbody data-bind="foreach: items">
    <tr>
        <td data-bind="text: name"></td>
        <td data-bind="text: major"></td>
        <td data-bind="text: sex"></td>
        <td><input data-bind='value: eng' /></td>
        <td><input data-bind='value: jap' /></td>
        <td><input data-bind='value: cal' /></td>
        <td><input data-bind='value: geo' /></td>
        <td><strong data-bind='text: total' /></td>
    </tr>
    </tbody>
</table>



当您从服务器获取JSON时,您可以使用Knockout、the或自己解析它们。我使用中的后一个选项创建了一个示例。

Thanx。我想知道是否有任何方法可以将可观察对象绑定到动态元素,就像eng+1一样。我不确定“eng+1”或“dynamic elements”是什么意思?也许你应该尝试一下你想要的,然后问一个后续问题,这样如果你被卡住了。