Knockoutjs-具有绑定和状态

时间:2020-07-28 19:14:31

标签: javascript knockout.js

我在组件绑定和状态方面遇到问题。

这是我的html模板:

{% block content %}
    {{ form_start(form) }}
    {{ form_errors(form) }}
    {% for i in 0..2 %}
        {{ form_label(form[i]) }}
        {{ form_widget(form[i]) }}
    {% endfor %}
    {{ form_end(form) }}
{% endblock %}

这是我的javascript

{% block content %}
    {{ form_start(form) }}
    {{ form_errors(form) }}
    {% for i in 0..2 %}
        {{ form_label(attribute(form, i)) }}
        {{ form_widget(attribute(form, i)) }}
    {% endfor %}
    {{ form_end(form) }}
{% endblock %}

我正在使用另一个脚本,通过将点击事件绑定到某些按钮来控制我所处的状态。

我遇到的问题是,当我更改当前状态时,组件绑定会重置组件的状态。例如。在customer-create组件上,我填写一个表单,然后更改为lookupState,然后再更改回createState,表单值消失了。

我认为这是由于每次删除并重新创建组件而导致的。

我还认为,对此的一种解决方案是将所有内容都存储在根级别(即存储状态的组件),并在需要时将其全部传递给各个组件。但是,我真的很想将特定于组件的信息保留在这些组件中。

有没有一种方法可以存储组件的状态,或者可以将组件存储在变量中并以这种方式绑定到变量?

1 个答案:

答案 0 :(得分:2)

来自documentations

如果您提供的表达式包含任何可观察值,则只要这些可观察值中的任何一个发生更改,该表达式就会被重新评估。后代元素将被清除,并且标记的新副本将添加到您的文档中并绑定到新值的上下文中。

if绑定的行为也相同。您可以为此使用visible绑定。这只是隐藏并显示div,而没有实际将其从DOM中删除。 visible没有无容器的控制流语法。因此,您必须将其添加到div

<div data-bind="component:'customer-create', visible: states.createState">Testing CreateState</div>