Kendo ui 剑道上传准备就绪/初始化事件?
我们使用MVC构建器进行剑道上传,但有时我们需要这样做:Kendo ui 剑道上传准备就绪/初始化事件?,kendo-ui,kendo-asp.net-mvc,Kendo Ui,Kendo Asp.net Mvc,我们使用MVC构建器进行剑道上传,但有时我们需要这样做: $("#someUploadId").data("kendoUpload").setOptions({ //some options }); kendoInitializer.waitFor("DropDownList", 1); kendoInitializer.waitFor("Window", 1); kendoInitializer.promise.done(function () { console.log("
$("#someUploadId").data("kendoUpload").setOptions({
//some options
});
kendoInitializer.waitFor("DropDownList", 1);
kendoInitializer.waitFor("Window", 1);
kendoInitializer.promise.done(function () {
console.log("all widgets initialized");
});
(我知道您可以通过包装器设置大多数内容,但有时我们需要定制javascript来处理特殊情况。)
但是,如果我把它放在doc.ready中,它将失败,因为它没有找到kendoUpload属性。这是一个时间问题,因为在docready中,kendoUploader仍在初始化,并且还不存在。我可以使用setTimeout来等待一秒钟,它会起作用,因为这会给剑道控制时间来初始化,但是以这种方式使用setTimeout显然是一种黑客行为,可能不可靠
通常,像这样的库具有某种类型的事件,表示控件已就绪/初始化。我还没有找到任何文档表明kendoUpload的类似构造。如何确定KendoUpload何时准备就绪?不幸的是,没有此类事件 但是,从MVC构建器生成的JS只是包装在jQuery就绪块中,因此您需要做的是将访问jQuery就绪块中的小部件所需的代码放在所述小部件的builder指令下面 这将起作用,因为所有就绪块都是按顺序执行的,小部件本身在插件方法被调用时就已经就绪(没有异步初始化) 您也可以尝试自己实现该事件,例如通过创建初始值设定项对象:
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;
}
}
};
然后像这样使用它:
$("#someUploadId").data("kendoUpload").setOptions({
//some options
});
kendoInitializer.waitFor("DropDownList", 1);
kendoInitializer.waitFor("Window", 1);
kendoInitializer.promise.done(function () {
console.log("all widgets initialized");
});
这只是一个原型,它要求您声明要等待的小部件的数量;也许有办法解决这个问题
()您可以尝试使用该事件。从文档中
当小部件绑定到其数据源中的数据时激发
因此,当数据绑定并绘制到DOM时,将触发此事件。我不确定你需要它做什么,但我们正在使用它向行中的一些单元格添加自定义CSS,如果我们使用剑道模板,这将是一个混乱,等等
请注意,每当数据被重新绘制到DOM时,即当表被过滤、排序等时,都会触发此命令。谢谢,我测试了此命令,它可以正常工作(对于简单的情况)。不幸的是,在我的例子中,出现了一些奇怪的问题,导致较低的doc.ready无法按顺序执行,我怀疑是因为我们推迟了对
$
的评估;如果这仍然是一个问题,您可以尝试使用类似于我添加到answerMy脚本的解决方案来解决这个问题。我的脚本包含在jquery下面,因此它没有被延迟,因为那时jquery已经加载,但是jquery上面的内联生成器被延迟。我最后要做的是在构建器对附加设置进行函数调用之后添加doc.ready脚本块(在@节javascriptIncludes
上方)。订单将是Kendo MVC builder,additionalSetup()代码>,
。确保MVC builder内联和我的附加设置都被延迟(延迟脚本确保它们按顺序执行)。我没有意识到doc.ready是确定的,因为它们是按顺序执行的,所以感谢它,因为它帮助我制定了解决方案。如果其他人对我所说的延迟评估感到困惑,我指的是:是的,我以前用过这个,但在这种情况下,我们需要在网格提取数据之前设置选项。也许你的回答会对其他有类似情况的人有所帮助。