knockback - сброс модели магистрали, нокаут при рендеринге

Я использую магистраль для постоянства и нокаут для связывания, то есть я использую отбрасывание При загрузке страницы все хорошо. Когда я нажимаю на флажок, основываясь на значении IsChecked, отображается либо да, либо нет.

Когда я нажимаю кнопку сброса модели, ранее увиденное поведение теряется. То есть, если отображается "да", и я нажимаю "сброс", то "нет" никогда не будет отображаться, независимо от состояния флажка.

Если я использую видимое связывание, оно будет работать, но мне нужно, чтобы это "если" работало, чтобы я мог решить, следует ли отображать некоторые элементы формы в зависимости от пользовательских критериев.

Любая помощь приветствуется. Благодарю.

Вот мой пример кода:

<script type="text/javascript">

var model_a;
var collection_ac;

var example_new_model_a;

$(document).ready(function () {
    model_a = Backbone.Model.extend({
        idAttribute: 'A_Pid',
        defaults: {
            A_Pid: null,
            ChildName: "",
            IsChecked: false,
            Show: false,
        },
    });

    example_new_model_a = new model_a();
    example_new_model_a.set('ChildName', 'child of test');

    vm = kb.viewModel(example_new_model_a);

    ko.applyBindings(vm, $('#div1')[0]);
});

var vm;

function reset_model() {
    kb.utils.release(vm);
    vm = null;

    example_new_model_a = new model_a();
    example_new_model_a.set('ChildName', 'child of test2');

    vm = kb.viewModel(example_new_model_a);
    ko.applyBindings(vm, $('#div1')[0]);
}

function show_div() {
    example_new_model_a.set('Show', true);
}

<div id="div1">
<div data-bind="visible: Show">
Check or Uncheck <input type="checkbox" data-bind="checked: IsChecked" />
<!-- ko if:IsChecked -->
<p>yes</p>
<!-- /ko -->
<!-- ko if:!IsChecked() -->
<p>no</p>
<!-- /ko -->
    <button data-bind="click: reset_model">Reset</button>
</div>
<button data-bind="click: show_div">Show</button>

редактировать

Я обнаружил, что, если я добавлю следующий код, даже после нажатия кнопки сброса, он работает. После прочтения Как заставить обновление представления, не вызывая его автоматически из наблюдаемой? и Knockout.js Шаблоны Foreach - принудительно завершить повторную визуализацию, я попробовал шаблон с if и он работает. Не знаю, как вызывать значение, мутировавшее из модели представления отбрасывания, поэтому, если нет лучшего способа, я буду использовать этот обходной путь.

<div data-bind="template: { name: 'test-template-1', if:IsChecked}"></div>
<script type="text/html" id="test-template-1">
  <p>yes2</p>
</script>

<div data-bind="template: { name: 'test-template-2', if:!IsChecked()}"></div>
<script type="text/html" id="test-template-2">
  <p>no2</p>
</script>

1 ответ

Надеюсь, я не пойму ваш вопрос: я использую память для сброса моделей в предыдущее состояние.

Когда я загружаю новое представление: я делаю снимок, используя model.store(). Когда я покидаю страницу или сбрасываю, я вызываю model.restore().

Другие вопросы по тегам