我是 Knockout JS 的新手,在将它与引导模式一起使用时遇到了一个问题,尽管经过数小时的研究,我仍然无法解决。
这是我的问题:我正在使用嵌套视图模型,并且我注意到,如果我在将模式设置为可见之前或之后尝试更新嵌套 vm 中的任何变量(无论是否可观察),这些变量将被重置为其初始值。这是一个示例代码,可以提供一个想法:
###########Javascript########################
function ViewModelA() {
self = this;
self.B = ko.observable(new ViewModelB(self));
self.ShowB(){
self.B.Show();
};
};
function ViewModelB(parent){
self = this;
self.varOne = ko.observable();
var varTwo = null;
self.Show = function(){
self.GetData();
$("#modalB").modal('show');
};
self.GetData = function(){
//Ajax call that sets varOne and varTwo
};
};
var A = new ViewModelA();
ko.applyBindings(A,document.getElementById('modalA'));
##############HTML###############################
<div id="modalA" class="modal fade" tabindex="-1" role="dialog" aria- labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Modal header</h3>
</div>
<div class="modal-body">
...
modalB 的 HTML 代码与在第一个 div 中添加data-bind="B"标记非常相似。
这个想法是,用户单击 ModalA 中的按钮将触发 ModalA 的 Show() 函数,该函数反过来从 AJAX 调用和显示的 ModalB 填充 ModalB 的 observables。
在上面的示例中,如果我从 Show() 函数中调用 GetData(),则一旦模式完成加载,varOne 和 varTwo 将被重置为其初始值。相反,如果我在 ViewModelB 被实例化时(即在用户调用 ModalA 的 Show 函数之前)调用 GetData(),那么新值将被保留。
在过去的几天里,我一直在摸不着头脑,试图了解为什么会发生这种情况以及如何最好地解决它。我研究了自定义绑定处理程序、渲染模板和调用引导模式“加载”事件。
有没有人遇到过这种情况?提前致谢!