将事件绑定到其他UI组件's函数,在Kendo MVVM中
Binding event to other UI component's function, in Kendo MVVM
在Kendo UI中,引用另一个UI元素(小部件)功能的最佳实践是什么;MVVM方式?
例如,假设我有一个网格和一个按钮。我想要这个按钮来触发网格的AddRow函数。为此,假设我有以下html:
<div id="grid" data-role="grid" />
<div id="button" data-bind="click: foo" />
我的视图模型看起来像:
var viewmodel = kendo.observable({
foo: function() {
// how to call the grid's functions here ideally, like for example in:
// var _grid = $("#grid").data("kendoGrid");
// _grid.addRow();
}
});
解开线条,这样做有一股味道;它看起来并不是可观察的,而是一个纯粹的DOM绑定事件。
另一种选择,比如将_grid作为属性或函数单独存储在我的视图模型中,似乎也同样效率低下。
但当然也有一些情况,比如上面的伪样本,这可能是一厢情愿的。毫无疑问,我看错了方向。因此,如有任何建议或最佳实践,我们将不胜感激。
不幸的是,没有最佳实践,而且也很难自定义。
如果您真的想要它,您可以修改绑定代码,以便它使用属性(在本例中为k-name
)为视图模型上的各种小部件添加属性:
function bind(dom, object) {
object = kendo.observable(object);
dom = $(dom);
kendo.originalBind(dom, object);
traverseChildren(object, dom[0]);
}
function traverseChildren(object, node) {
var children = node.children;
for (var idx = 0; idx < children.length; idx++) {
if (node.nodeType !== 1) continue;
var widget = kendo.widgetInstance($(children[idx]));
if (widget && widget.element) {
var name = $(widget.element).attr("k-name");
if (name)
object[name] = widget;
}
traverseChildren(object, children[idx]);
}
}
对于带有小部件的每个元素,您可以为其指定一个名称,以便使用进行访问
<input k-name="picker" data-role="datepicker" />
然后你可以访问虚拟机中的小部件:
$(document).ready(function () {
kendo.originalBind = kendo.bind;
kendo.bind = bind;
var viewmodel = kendo.observable({
setToday: function (e) {
this.picker.value(new Date());
},
enable: function (e) {
this.picker.enable(true);
},
disable: function (e) {
this.picker.enable(false);
}
});
kendo.bind($("#example"), viewmodel);
});
(演示)
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 将模型从Kendo Mvc UI网格传递到javascript函数
- 将事件绑定到其他UI组件's函数,在Kendo MVVM中
- 从Kendo中的columns.filterable.cell.template函数访问列字段名
- 可以't create Kendo GanttChart:未定义不是一个函数,尽管GanttDataSource
- Kendo mvc网格客户端模板javascript函数不起作用
- Kendo dropDrownlist 没有在 change() 函数上被触发
- 当存在角度时,Kendo UI 网格无法从 jquery 初始化 - 抛出“undefined 不是函数”
- Kendo NumericTextBox 中存在一个错误,它存在于函数 caret(element, position)
- Kendo Grid不识别Grid事件生成器函数“;FilterMenuInit”;
- 如何在Kendo UI中将java脚本函数设置为菜单栏项
- .submit函数在使用kendo验证器无效时未运行
- 覆盖Kendo UI中的javascript函数
- Kendo UI Grid列headerTemplate函数无法访问列定义
- Kendo网格模板For循环If Else函数
- 在网格中未定义Kendo UI - data-column模板函数
- 无法从kendotreelist中的kendo模板调用typescript中的函数
- 如何在kendo-UI函数中访问javascript变量