很遗憾,没有这样的活动。
但是,从 MVC 构建器生成的 JS 只是简单地包装在 jQuery 就绪块中,因此您需要做的就是将需要访问小部件的代码放在该小部件的构建器指令下方的 jQuery 就绪块中。
这将起作用,因为所有准备好的块都是按顺序执行的,并且一旦调用插件方法,小部件本身就准备好了(没有异步初始化)。
您也可以尝试自己实现该事件,例如通过创建一个初始化对象:
var deferred = $.Deferred();
var kendoInitializer = {
widgets: [],
total: 0,
waitFor: function (name, number) {
this.widgets[name] = number;
this.total += number;
},
deferred: deferred,
promise: deferred.promise(),
resolveOne: function (name) {
console.log(name, "initialized", this.total);
this.removeOne(name);
if (this.total <= 0) { // could also resolve per widget type etc.
this.deferred.resolve();
}
},
removeOne: function (name) {
if (this.widgets.hasOwnProperty(name)) {
this.widgets[name] -= 1;
this.total -= 1;
}
}
};
然后让每个小部件向初始化器注册自己:
kendo.ui.Widget.fn.init = function (originalFn) {
return function () {
originalFn.apply(this, arguments);
// mark one widget as initialized;
// pass this.options.name and resolve per widget type
kendoInitializer.resolveOne(this.options.name);
};
}(kendo.ui.Widget.fn.init);
然后像这样使用它:
kendoInitializer.waitFor("DropDownList", 1);
kendoInitializer.waitFor("Window", 1);
kendoInitializer.promise.done(function () {
console.log("all widgets initialized");
});
这只是一个原型,需要您声明要等待的小部件数量;可能有办法解决这个问题。
(demo)