Backbone.js 击退-主干模型重置,如果渲染,击退

Backbone.js 击退-主干模型重置,如果渲染,击退,backbone.js,knockout.js,knockback.js,Backbone.js,Knockout.js,Knockback.js,我使用主干进行持久性,使用敲除进行绑定,也就是说,我使用击退 页面加载时,一切正常。当我单击复选框时,基于IsChecked的值,将显示yes或no 当我单击“重置模型”按钮时,先前看到的行为将丢失。 也就是说,如果显示“是”,并且我单击“重置”,则无论复选框的状态如何,都不会显示“否” 如果我使用可见绑定,它将工作,但我需要让这个“如果”工作,以便我可以根据用户条件决定是否呈现一些表单元素 感谢您的帮助。谢谢 以下是我的示例代码: <script type="text/javascrip

我使用主干进行持久性,使用敲除进行绑定,也就是说,我使用击退 页面加载时,一切正常。当我单击复选框时,基于IsChecked的值,将显示yes或no

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

如果我使用可见绑定,它将工作,但我需要让这个“如果”工作,以便我可以根据用户条件决定是否呈现一些表单元素

感谢您的帮助。谢谢

以下是我的示例代码:

<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);
}

var模型;
var集合_ac;
var示例(新模型)(a);
$(文档).ready(函数(){
model_a=主干网.model.extend({
IdaAttribute:“A_Pid”,
默认值:{
A_Pid:null,
儿童姓名:“,
检查:错误,
秀:假,,
},
});
示例_new_model_a=新模型_a();
示例新模型集合('ChildName','childoftest');
vm=kb.viewModel(示例为新模型);
ko.applyBindings(vm,$('div1')[0]);
});
var-vm;
函数重置_模型(){
kb.utils.release(vm);
vm=null;
示例_new_model_a=新模型_a();
示例_new_model_a.set('ChildName','test2的子级');
vm=kb.viewModel(示例为新模型);
ko.applyBindings(vm,$('div1')[0]);
}
函数show_div(){
示例新模型集合('Show',true);
}


勾选或取消勾选
对

没有

重置 显示

编辑

我发现,如果我添加以下代码,即使在按下reset之后,它也能工作。在阅读了和之后,我尝试了使用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>

是的

二号


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

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

在测试应用程序中没有使用memento。编辑现有对象似乎不是问题。我有我的撤销功能(在SO的帮助下构建),可以正常工作。如果用户创建了一个新对象,然后决定停止并点击“取消”再次创建一个新对象,我尝试的是通过创建一个新对象重新开始,这就是我看到这种行为的时候。我能想到的可能原因是,创建一个新对象并不会引发KO中的触发器,从而通过可观察对象传播UI更改。
<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>