使用KnockoutJS绑定动态创建的表条目

时间:2013-09-14 04:13:51

标签: javascript asp.net-mvc-4 knockout.js

我使用ASP.NET MVC4在表中动态生成行。我想使用Knockout将所述表的每个生成行中的复选框的enabled属性绑定到一个表达式,该表达式正在评估该列中是否存在给定数量的复选框。

以下是我的表格示例:

<table>
    <tr>
        <th>Happy?</th>
    </tr>
    @for (int z = 0; z < Model.People.Count; z++) { 
    <tr>
        <td>@Html.CheckboxFor(Model.People[z].Happy,new{@data_bind= "checked: CheckedHappyPeople, enable: CheckedHappyPeople.length < 5 || CheckedHappyPeople"})
        </td>
    }
    </tr>
</table>

我的VM:

function viewModel(){
var self = this;
self.CheckedHappyPeople = ko.observableArray();
}

我的模特:

public class PeopleViewModel
{
public List<People> {get; set;}

public PeopleViewModel(){}
}

public class People
{
public bool Happy {get; set;}
}

根据我的上述内容,每当我选择“快乐”复选框时,表格中的所有复选框都会被选中/取消选中。如何使用Knockout绑定到这些动态生成的元素?我应该以某种方式在ASP.NET MVC4中使用foreach绑定吗?

1 个答案:

答案 0 :(得分:0)

你应该尝试学习和理解Knockout而不是让别人为你编写代码。首先,你没有通过让别人为你做任何事来学习任何东西,而有两个,你不理解我为你写的代码。话虽这么说,这是其他人可能在将来寻找的解决方案,所以这就是答案。

http://jsfiddle.net/gzsgy/14/

<input data-bind="checked: Selected, enable: $parent.selections() < 5 || Selected()" type="checkbox" />

跟踪选择,如果有5个或更多选项或已经选中,则禁用该复选框,这样您仍然可以取消选中它。