问题:Kendo 带有自定义 angularjs 指令和 kendoConfirm 的工具提示
ISSUE: Kendo tooltip with custom angularjs directive and kendoConfirm
我现在的情况:
kendo 工具提示可以单独使用。
我的新自定义 angularjs 指令与 kendoConfirm 单独工作正常。
但是一旦我尝试在一个元素上同时使用它们,那么只有 kendo 工具提示停止工作。
<button type="button" title="Disable Item" k-confirm-disable k-confirm-disable-title="'Confirm Disable'" k-confirm-disable-msg="'Are you sure you want to disable this item?'" ng-click="disable(dataItem.id)" class="btn btn-danger" kendo-tooltip k-content="'Disable Item'" k-options="kendoTooltipOptions">
$scope.kendoTooltipOptions = {
showAfter: 600, //time for tooltip appear
position : 'top',
width : 100
}
kendo 工具提示仅在我从元素中删除自定义 angular 指令时才有效。
function kConfirmDisable($compile){
return {
restrict: 'A',
scope: {
kConfirmDisableTitle: '@',
kConfirmDisableMsg: '@'
},
link: function(scope, element, attrs){
var clickHandlers = $._data(element[0]).events.click;
clickHandlers.reverse(); //reverse the click event handlers list
var onClick = function(evt) {
evt.preventDefault();
evt.stopImmediatePropagation();
if(!scope.kConfirmDisableTitle) {
scope.kConfirmDisableTitle = "Confirm";
}
if(!scope.kConfirmDisableMsg) {
scope.kConfirmDisableMsg = "Are you sure?";
}
angular.element("<div></div>").kendoConfirm({
title: scope.kConfirmDisableTitle.replace(/['"]+/g, ''),
content: scope.kConfirmDisableMsg.replace(/['"]+/g, ''),
buttonLayout: "normal",
visible: false,
actions: [
{
text: "No",
Primary: false,
action: function(){
evt.preventDefault();
evt.stopImmediatePropagation();
}
},
{
text: "Yes",
Primary: true,
action: function(){
element.unbind(this);
setTimeout(function() {
element.unbind("click", onClick);
element.click();
evt.preventDefault();
evt.stopImmediatePropagation();
element.on("click", onClick);
},0);
}
},
],
animation: {
open:{
effects: "zoom:in",
duration: 250
},
close:{
effects: "fade:out",
duration: 250
}
},
open: function(e) {
$("html, body").css("overflow", "hidden");
},
close: function() {
$("html, body").css("overflow", "visible");
}
}).data("kendoConfirm").open().result;
};
element.on("click", onClick);
clickHandlers.reverse();
}
}
}
由于 Kendo AngularJs 来源不可用,我只能建议几件事:
尝试研究如果您不停止传播并且不停止指令中的默认点击会发生什么。
如果场景是在不使用点击的情况下重新加载页面和悬停在元素上时它不会立即起作用 - 那么这不相关。
避免在指令中使用独立作用域,并通过 $attrs link 函数参数获取属性。因为你没有指定你得到 js 错误,我假设 Kendo 没有使用隔离范围,但这仍然是一个调查的方向。
我的解决方案是我从 "k-confirm-disable" 指令中删除了 "k-",它起作用了。
我想是因为 kendo 保留了 "k-"。
我现在的情况: kendo 工具提示可以单独使用。 我的新自定义 angularjs 指令与 kendoConfirm 单独工作正常。
但是一旦我尝试在一个元素上同时使用它们,那么只有 kendo 工具提示停止工作。
<button type="button" title="Disable Item" k-confirm-disable k-confirm-disable-title="'Confirm Disable'" k-confirm-disable-msg="'Are you sure you want to disable this item?'" ng-click="disable(dataItem.id)" class="btn btn-danger" kendo-tooltip k-content="'Disable Item'" k-options="kendoTooltipOptions">
$scope.kendoTooltipOptions = {
showAfter: 600, //time for tooltip appear
position : 'top',
width : 100
}
kendo 工具提示仅在我从元素中删除自定义 angular 指令时才有效。
function kConfirmDisable($compile){
return {
restrict: 'A',
scope: {
kConfirmDisableTitle: '@',
kConfirmDisableMsg: '@'
},
link: function(scope, element, attrs){
var clickHandlers = $._data(element[0]).events.click;
clickHandlers.reverse(); //reverse the click event handlers list
var onClick = function(evt) {
evt.preventDefault();
evt.stopImmediatePropagation();
if(!scope.kConfirmDisableTitle) {
scope.kConfirmDisableTitle = "Confirm";
}
if(!scope.kConfirmDisableMsg) {
scope.kConfirmDisableMsg = "Are you sure?";
}
angular.element("<div></div>").kendoConfirm({
title: scope.kConfirmDisableTitle.replace(/['"]+/g, ''),
content: scope.kConfirmDisableMsg.replace(/['"]+/g, ''),
buttonLayout: "normal",
visible: false,
actions: [
{
text: "No",
Primary: false,
action: function(){
evt.preventDefault();
evt.stopImmediatePropagation();
}
},
{
text: "Yes",
Primary: true,
action: function(){
element.unbind(this);
setTimeout(function() {
element.unbind("click", onClick);
element.click();
evt.preventDefault();
evt.stopImmediatePropagation();
element.on("click", onClick);
},0);
}
},
],
animation: {
open:{
effects: "zoom:in",
duration: 250
},
close:{
effects: "fade:out",
duration: 250
}
},
open: function(e) {
$("html, body").css("overflow", "hidden");
},
close: function() {
$("html, body").css("overflow", "visible");
}
}).data("kendoConfirm").open().result;
};
element.on("click", onClick);
clickHandlers.reverse();
}
}
}
由于 Kendo AngularJs 来源不可用,我只能建议几件事:
尝试研究如果您不停止传播并且不停止指令中的默认点击会发生什么。 如果场景是在不使用点击的情况下重新加载页面和悬停在元素上时它不会立即起作用 - 那么这不相关。
避免在指令中使用独立作用域,并通过 $attrs link 函数参数获取属性。因为你没有指定你得到 js 错误,我假设 Kendo 没有使用隔离范围,但这仍然是一个调查的方向。
我的解决方案是我从 "k-confirm-disable" 指令中删除了 "k-",它起作用了。 我想是因为 kendo 保留了 "k-"。