2012-09-07 36 views
0

我正在使用骨幹進行持久性和淘汰賽的綁定,即我使用的是擊倒 在頁面加載時,一切正常。當我點擊複選框時,根據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); 
} 

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

編輯

我發現,如果我添加以下代碼,即使按復位後,有用。在閱讀How to force a view refresh without having it trigger automatically from an observable?Knockout.js Templates Foreach - force complete re-render後,我嘗試了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> 

回答

0

希望我不會誤解您的問題:我使用memento將模型重置爲以前的狀態。

當我打開一個新的觀點:我做一個使用快照model.store() 離開頁面時,或正在重置我叫model.restore()

+0

我沒有在我的測試應用程序中使用的紀念品。編輯一個現有的對象似乎沒有問題。我有我的撤消功能(建立與SO的幫助)哪些工作。如果用戶創建一個新對象,然後決定停止並點擊取消並再次創建一個新對象,我嘗試的是通過創建一個新對象來重新開始,這是我看到這種行爲的時候。我可以想到的可能的原因是創建一個新對象不會引發KO中的觸發器以通過observables傳播UI更改。 – bvoleti