我正在尝试访问jquery插件中保存的设置。我有一个保存在jquery数据中的设置列表。我想稍后在插件中包含的函数中访问这些设置。下面的插件代码。
(function ($) {
var kendoEditWindowFunctions = {
init: function (settings) {
settings.validator =
$(this).kendoValidator().data("kendoValidator");
$(this).data("settings", settings);
$(settings.submitButton).click(function () {
$(settings.Name).kendoEditWindow("Submit");
});
},
OnBegin: function () {
$(this).addClass("k-state-submit");
},
OnComplete: function () {
$(this).removeClass("k-state-submit");
},
OnFailed: function (xhr) {
AjaxErroMessage(data);
},
OnSuccess: function () {
var settings = $(this).data("settings");
if (settings.grid)
$(settings.grid).data("kendoGrid").dataSource.read();
$(this).kendoEditWindow("Close");
notification.show({
title: "Success",
message: "Record has been saved successfully."
}, "success");
},
Open: function (routeValues, e) {
var settings = $(this).data("settings");
var url = settings.fetchController + "/" + settings.fetchAction;
if ($(e.currentTarget).data("grid-button")) {
var grid = $(e.currentTarget).closest(".k-grid");
var attributes = $(e.currentTarget).data();
var uid = $(e.currentTarget).closest("tr").data("uid");
var dataItems = $(grid).data("kendoGrid").dataSource.getByUid(uid);
for (var key in attributes) {
if (attributes.hasOwnProperty(key) && key.indexOf("editRouteProperty") >= 0) {
for (var key2 in attributes[key]) {
if (attributes[key].hasOwnProperty(key2)) {
routeValues[key2] = dataItems[attributes[key][key2]];
}
}
}
}
}
$.ajax({
url: url,
data: routeValues,
beforeSend: function () {
$(settings.window).addClass("k-state-loading");
},
complete: function () {
setTimeout(function () {
$(settings.window).removeClass("k-state-loading");
}, 500);
},
success: function (data) {
$(settings.window).find(".form-container").html(data);
},
error: function () {
$(settings.window).find(".form-container").html("Data load error");
}
});
$(settings.window).data("kendoWindow").open();
},
Close: function () {
$(this).data("kendoWindow").close();
},
Clear: function () {
$(this).removeClass("k-state-submit");
$(this).removeClass("k-state-loading");
$(this).find(".form-container").html("");
},
Submit: function () {
var settings = $(this).data("settings");
if (settings.validator.validate())
$(settings.form).submit();
}
}
$.fn.kendoEditWindow = function (methodOrOptions) {
if (kendoEditWindowFunctions[methodOrOptions]) {
return kendoEditWindowFunctions[methodOrOptions].apply(this,
Array.prototype.slice.call(arguments, 1));
} else if (typeof methodOrOptions === "object" || !methodOrOptions) {
return kendoEditWindowFunctions.init.apply(this, arguments);
} else {
$.error("Method " + methodOrOptions + " does not exist");
}
};
})(jQuery);
问题在于$(this).data(“ settings”)返回的Submit函数内部未定义。我不知道为什么。除了提交功能外,它在所有其他功能中都可以正常工作。我相信这确实很简单。有什么想法吗?
答案 0 :(得分:1)
我的猜测是$(settings.Name)
与您最初用来初始化插件的元素不同
因此,当您执行$(settings.Name).kendoEditWindow("Submit");
时,该插件将具有一个不同的this
,其中没有任何数据集作为应用init()
的原始元素< / p>
您可以尝试更改
$(settings.submitButton).click(function () {
$(settings.Name).kendoEditWindow("Submit");
});
收件人
var _this = this
$(settings.submitButton).click(function () {
$(_this).kendoEditWindow("Submit");
});
或
$(settings.submitButton).click(function () {
kendoEditWindowFunctions.Submit()
});