我正在使用骨幹進行持久性和淘汰賽的綁定,即我使用的是擊倒 在頁面加載時,一切正常。當我點擊複選框時,根據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>
我沒有在我的測試應用程序中使用的紀念品。編輯一個現有的對象似乎沒有問題。我有我的撤消功能(建立與SO的幫助)哪些工作。如果用戶創建一個新對象,然後決定停止並點擊取消並再次創建一個新對象,我嘗試的是通過創建一個新對象來重新開始,這是我看到這種行爲的時候。我可以想到的可能的原因是創建一個新對象不會引發KO中的觸發器以通過observables傳播UI更改。 – bvoleti