knockback-主干模型重置,如果渲染则淘汰



我使用主干进行持久化,使用敲除进行绑定,即使用敲除在页面加载方面,一切都很好。当我单击复选框时,根据IsChecked的值,会显示yes或no。

当我点击重置模型按钮时,以前看到的行为将丢失。也就是说,如果显示"是",并且我单击重置,那么无论复选框状态如何,都不会显示"否"。

如果我使用可见绑定,它会起作用,但我需要让这个"If"起作用,这样我就可以根据用户条件决定是否呈现一些表单元素。

感谢您的帮助。谢谢

这是我的示例代码:

<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模板,它有效。不确定如何从knockback视图模型中调用值,所以除非有更好的方法,否则我将使用此解决方法。

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

希望我没有误解你的问题:我使用memento将模型重置为以前的状态。

当我加载一个新视图时:我使用model.store()创建一个快照当离开页面或重新设置种子时,我调用model.restore()

相关内容

  • 没有找到相关文章

最新更新