我正在尝试将Knockout实现到我的Symfony2项目中,并且我已经到了需要将集合类型集成到我的表单中的点。我已经关注了Symfony2文档(http://symfony.com/doc/current/reference/forms/types/collection.html)。我在SF2方面有丰富的经验。但是,我最近开始使用Knockout。
我想知道的是如何将symfony2的树枝{%for bform in form.a.bs%}与data-bind =" foreach:b"这样我的表格就可以显示当前数据了,还允许我使用KnockoutJS添加/删除。
我仍然没有工作代码,因为我在想如何实现这一点,但这只是表格<tbody>
的一个例子:
<tbody data-prototype="{{ form_widget(form.a.bs.vars.prototype)|e }}">
{% for bForm in form.a.bs %}
<tr>
<td>{{ form_widget(bForm.first) }}</td>
<td>{{ form_widget(bForm.second) }}</td>
</tr>
{% endfor %}
</tbody>
在我的淘汰赛中我目前有:
function viewModel() {
self = this;
self.bs = ko.observableArray();
self.addB = function() {
// Logic to add a new form row in the table provided in SF2 documentation above
}
}
ko.applyBindings(new viewModel());
我不知道如何处理这个问题。我知道我可以将JSON与Knockout一起使用,但是从SF2的角度考虑它,当你点击一个动作时,可以说createAAction(){}返回带有表单的.html.twig,所有我在Knockout文档中看到的是从服务器检索JSON,但这不是我的情况。我希望当页面加载当前信息时,淘汰赛会把它拿起来。
如果这还不够清楚,请告诉我。
答案 0 :(得分:1)
使用Knockout进行这项工作不会有任何直接或有价值的方法。 Knockout的整个前提是所有数据都在viewmodel中,视图反映了viewmodel并接受了viewmodel的输入。 Symphony2将数据放在视图中。
您最好使用jQuery来执行您想要执行的DOM操作。
你当然可以在幕后使用Knockout的可观察和计算,如果它可以帮助你管理你的数据依赖,你甚至可以在页面上添加一些绑定,只要它们是DOM的一部分不会被其他任何事情管理。但是将Knockout绑定与另一个构建DOM的系统结合起来是行不通的。