【问题标题】:Binding dynamically created table entries with KnockoutJS使用 KnockoutJS 绑定动态创建的表条目
【发布时间】:2013-09-15 05:07:54
【问题描述】:

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

这是我的表的示例:

<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>

还有我的虚拟机:

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 绑定吗?

【问题讨论】:

  • 表是使用(客户端)KO的foreach动态生成的,还是在服务端生成的?
  • 他的代码在那里显示,但令人失望的是您实际上并没有尝试任何东西,您只是在要求其他人为您编写代码。绝对不是一个好的学习方式。
  • @NikosParaskevopoulos 该表是在服务器端动态生成的,不使用 KO 的 foreach

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


【解决方案1】:

您应该真正尝试学习和理解 Knockout,而不是要求别人为您编写代码。第一,让别人为你做这件事你并没有学到任何东西,第二,你不理解我为你编写的代码。话虽如此,这是其他人将来可能会寻找的解决方案,所以这就是答案。

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

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

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

【讨论】:

  • 我的示例保持基本,但根据您的反馈,我修改了我的问题并包含更多代码。您的解决方案没有触及我问题的症结:动态生成的元素(您在 VM 中手动创建了多个实体)。借助我提供的新信息,您或许可以帮助我了解如何通过foreach 绑定或某种模板来绑定到动态生成的元素。无论如何,感谢您的帮助。
  • 如果你知道淘汰赛,答案会告诉你。您需要订阅每个新创建的对象 selected 属性,就像我使用 ko.utils.arrayForEach
猜你喜欢
  • 2016-05-26
  • 1970-01-01
  • 2013-02-08
  • 2015-01-29
  • 2012-10-15
  • 2015-06-26
  • 2012-10-19
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多