【问题标题】:KnockoutJS + Symfony2 + Twig collection form add and remove itemsKnockoutJS + Symfony2 + Twig 集合表单添加和删除项目
【发布时间】:2016-01-08 16:59:08
【问题描述】:

我正在尝试在我的 Symfony2 项目中实现 Knockout,并且我已经到了需要将集合类型集成到我的表单中的地步。我遵循了 Symfony2 文档 (http://symfony.com/doc/current/reference/forms/types/collection.html)。我在SF2方面有丰富的经验。不过,我最近开始使用 Knockout。

我想知道的是如何将 symfony2 的 twig {% 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,但这不是我的情况。我希望当页面加载当前信息时,敲除将其拾取。

如果这还不够清楚,请告诉我。

【问题讨论】:

  • 您将在哪里进行淘汰赛的数据,以及如何对这些数据进行更改?
  • 嗯,这是一个很好的问题,但数据只会附加到发送到 html.twig 的 formView 上。当我渲染表单时,数据就在那里 {{ form_widget(bla呜呜呜

标签: javascript php forms symfony knockout.js


【解决方案1】:

不会有任何直接或有价值的方法来使用 Knockout 进行这项工作。 Knockout 的整个前提是所有数据都在 viewmodel 中,并且 view 反映 viewmodel 并接受 viewmodel 的输入。 Symphony2 将数据放入视图中。

你最好使用 jQuery 来执行你想做的 DOM 操作。

你当然可以在幕后使用 Knockout 的可观察对象和计算对象,如果这可以帮助你管理数据依赖关系,你甚至可以在页面上放置一些绑定只要它们在 DOM 的片段中不会被由其他任何东西管理。但是将 Knockout 绑定与另一个 DOM 构建系统结合起来是行不通的。

【讨论】:

  • 我就是这么想的。如果我在视图模型中没有数据,se Knockout 没有多大意义,必须做双重工作来填充淘汰赛和东西,我正在考虑使用淘汰赛和 jquey 的组合,jquery 来处理 dom 和淘汰赛处理数据绑定和可计算的东西,你认为这是一种合理的方法还是我应该坚持使用 jQuery?我真正想要以更有条理的方式实现自动化的是视图(前端)中的相关事物更新的方式。例如,具有项目和事物列表总量的标签 l
猜你喜欢
  • 1970-01-01
  • 2012-09-05
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多