我使用RPNiemeyer剑道淘汰赛库。 我有一个网格。 当用户点击网格中的行显示一个弹出窗口。 当你以同样的方式关闭该窗口并打开它再次申请冻结与关闭动画。 我试着尽我所能来重现这一场景小提琴。 在拨弄当您关闭弹出窗口,点击该行又什么都不会发生,而浏览器重新加载。 我坚信,类似的事情在我的应用程序正在发生的事情。
HTML:
<div data-viewId="languageList" >
<div id="languageList" data-bind="with: viewModel">
<div id="languageListGrid" data-bind="kendoGrid: { data: languageViewModels, columns: [
{
template: '<a href=\'\' data-bind=\'click: function() { onLanguageSelected("#=Language#") }\'>#=Language#</a>',
field: 'Language',
title: 'Language',
width: 50
}
],
scrollable: false, sortable: true, pageable: false }" style="height: 380px">
</div>
</div>
</div>
<div data-viewid="languageDetails">
<div id="languageDetails" data-bind="with: viewModel" class="hidden">
<form id="languageDetailsForm" action="" style="font-family: Trebuchet MS, Verdana, Helvetica, Sans-Serif;">
<div data-bind="kendoWindow: {isOpen: isOpen, title:'Language', width: 400, height: 200, modal: true }" >
test
<button id="cancelLanguage" class="k-button" data-bind="click: cancelLanguage">Cancel</button>
</div>
</form>
</div>
</div>
JavaScript的:
$(function () {
var elementIsBoundNew = function (element) {
return !!ko.dataFor(element);
}
var applyBindings = function (viewModel, elementId) {
var element = $('div[data-viewId="' + elementId + '"]')[0];
if (!elementIsBoundNew(element)) {
var parentViewModel = { viewModel: viewModel };
ko.applyBindings(parentViewModel, element);
}
};
var FranchiseDetailsViewModel = function () {
var
self = this,
initialize = function () {
self.languagesInfoViewModel(new LanguageListViewModel(self));
applyBindings(self.languagesInfoViewModel, "languageList");
};
FranchiseDetailsViewModel.prototype.languagesInfoViewModel = ko.observable();
initialize();
};
var LanguageListViewModel = function (franchise) {
var
self = this,
initialize = function () {
var languageViewModel = new LanguageDetailsViewModel(franchise);
self.languageViewModels.push(languageViewModel);
};
LanguageListViewModel.prototype.languageViewModels = ko.observableArray([]);
LanguageListViewModel.prototype.selectedLanguageViewModel = ko.observable();
LanguageListViewModel.prototype.onLanguageSelected = function (selectedLanguage) {
// when you uncomment this line everyting works fine
//var language = new LanguageDetailsViewModel();
self.selectedLanguageViewModel(self.languageViewModels()[0]);
applyBindings(self.selectedLanguageViewModel, "languageDetails");
self.selectedLanguageViewModel().openPopUp();
};
initialize();
};
var LanguageDetailsViewModel = function () {
var
self = this,
closePopUp = function () {
self.isOpen(false);
};
self.Language = ko.observable("English");
LanguageDetailsViewModel.prototype.isOpen = ko.observable(false);
LanguageDetailsViewModel.prototype.openPopUp = function () {
self.isOpen(true);
};
LanguageDetailsViewModel.prototype.cancelLanguage = function () {
closePopUp();
};
};
var initialize = new FranchiseDetailsViewModel();
});
奇怪的是,如果我这一行的代码添加到我的onLanguageSelected方法everyting正常工作:
var language = new LanguageDetailsViewModel();
小提琴:
http://jsfiddle.net/bZF9k/26/
与工作示例任何帮助,将不胜感激。 谢谢!
每RPNiemeyer`s后更新:
我已经添加几行代码使用从这里的技术剑道淘汰赛:调用了从与网格内的数据绑定模板改变视图模型性能的方法,打破绑定 :
ko.bindingHandlers.preventBinding = {
init: function() {
return { controlsDescendantBindings: true };
}
};
ko.bindingHandlers.kendoGrid.options.dataBound = function(data) {
var body = this.element.find("tbody")[0];
if (body) {
ko.applyBindings(ko.dataFor(body), body);
}
};
这究竟是什么在我的应用程序发生。 当我打开弹出,关闭它比再次打开它没有正确关闭的第二次。 请参阅我的更新小提琴:
http://jsfiddle.net/bZF9k/29/
我在想什么? 再次感谢您的反馈!