我正在尝试创建一个带有 knockoutjs 模型的网页,该模型允许用户使用模态弹出窗口更新项目。对于模态,我想使用 jQuery facebox 插件 - http://defunkt.io/facebox/
我有一个正在进行的演示,直到您第二次尝试更新项目为止。您更新的第一个项目保存正常,但随后绑定似乎丢失了。我试图调整其他问题的示例以适应面框插件,但似乎无法正确处理。
我正在使用如下定义的自定义绑定处理程序:-
ko.bindingHandlers.modal = {
init: function(element, valueAccessor, allBindingsAccessor) {
var allBindings = allBindingsAccessor();
var $element = $(element);
$element.addClass('hide modal');
if (allBindings.modalOptions) {
if (allBindings.modalOptions.beforeClose) {
$element.on('hide', function() {
return allBindings.modalOptions.beforeClose();
});
}
}
return ko.bindingHandlers['with'].init.apply(this, arguments);
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var returnValue = ko.bindingHandlers['with'].update.apply(this, arguments);
if (value) {
$.facebox(element);
} else {
$(document).trigger('close.facebox');
}
return returnValue;
}
};
在我的敲除模型中,我有一个变量来存储由我的模态编辑的选定项目,以及更新/保存/取消它的函数
self.editingMapmarker = ko.observable();
self.editMapmarker = function(mapmarker) {
self.editingMapmarker(mapmarker);
self.editingMapmarker().reset();
};
self.saveMapmarker = function() {
self.editingMapmarker().accept();
self.editingMapmarker(undefined);
}
self.cancelSaveMapmarker = function() {
self.editingMapmarker(undefined);
}
到目前为止,我有一个我的工作的Jsfiddle - http://jsfiddle.net/juBxs/
任何人都可以帮助我在第一次保存后保留绑定吗?
两个选项:
看起来您的自定义绑定已经在 KO 2.2 中正常工作:http://jsfiddle.net/rniemeyer/Cpvtd/
如果您无法升级到 2.2,那么您应该能够在更新功能中切换with
更新的顺序和facebox
打开/关闭。
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
if (value) {
$.facebox(element);
} else {
$(document).trigger('close.facebox');
}
return ko.bindingHandlers['with'].update.apply(this, arguments);
}
示例:http://jsfiddle.net/rniemeyer/wsNZa/