如何在webix甘特图任务上添加点击事件
How to add a click event on webix gantt task
我第一次使用webix甘特图。之前,使用的是dhtmlx gantt(同一家公司开发的),
在 dhtmlx 甘特图上,有 onTaskClick 事件。但是在 webix 甘特图上,缺少此事件?
有人知道如何添加 onTaskClick 事件吗?
Webix 甘特图中没有这样的事件,但这不是问题。
如果您想跟踪任务的选择,请在 selected
属性:
的反应状态上使用 $observe
$$("gtt").getState().$observe("selected", id => {
console.log(id);
});
如果您需要任何点击,您需要做更多的事情,但这是可能的。 Gantt 中没有私有代码,UI 的每个部分都定义为 ES6 class。因此,要更改 UI 或其行为中的某些内容,您需要重新定义一些 classes.
甘特图可通过 gantt.views["chart/bars"] 访问。让我们重新定义它并添加一个全局应用程序事件:
class bars extends gantt.views["chart/bars"] {
/**
* Sets action of bar item click
* @param {(string|number)} id - ID of the clicked item
*/
ItemClickHandler(id) {
super.ItemClickHandler(id);
// the check is optional, leave it if
// you do not want to track
// clicks on group items in
// display:"resources"
if (!this.Bars.getItem(id).$group) {
this.app.callEvent("onTaskClick", [id]);
}
}
}
接下来,应用覆盖:
webix.ui({
view: "gantt",
id:"gtt",
url: "https://docs.webix.com/gantt-backend/",
override: new Map([
[gantt.views["chart/bars"], bars]
])
});
现在您可以像这样跟踪事件:
gantt1.$app.attachEvent("onTaskClick", id => {
webix.message("Clicked " + id);
});
如果您希望在 gantt obj 本身而不是其 $app 属性 上进行此活动,您可以“引导”该活动:
webix.protoUI({
name:"my-gantt",
$init: function(){
this.$app.attachEvent("app:task:click", id => {
this.callEvent("onTaskClick", [id]);
});
}
}, webix.ui.gantt);
webix.ui({
view: "my-gantt",
id:"gtt",
url: "https://docs.webix.com/gantt-backend/",
override: new Map([
[gantt.views["chart/bars"], bars]
])
});
...然后像通常的 Webix 小部件事件一样收听它:
gantt1.attachEvent("onTaskClick", id => {
webix.message("Clicked " + id);
});
整体例子是https://snippet.webix.com/p0sardik
如果您还想跟踪 Tree 的点击次数,则需要以类似的方式覆盖 gantt.views.tree(重新定义 ItemClickHandler 方法)。
我第一次使用webix甘特图。之前,使用的是dhtmlx gantt(同一家公司开发的),
在 dhtmlx 甘特图上,有 onTaskClick 事件。但是在 webix 甘特图上,缺少此事件?
有人知道如何添加 onTaskClick 事件吗?
Webix 甘特图中没有这样的事件,但这不是问题。
如果您想跟踪任务的选择,请在 selected
属性:
$$("gtt").getState().$observe("selected", id => {
console.log(id);
});
如果您需要任何点击,您需要做更多的事情,但这是可能的。 Gantt 中没有私有代码,UI 的每个部分都定义为 ES6 class。因此,要更改 UI 或其行为中的某些内容,您需要重新定义一些 classes.
甘特图可通过 gantt.views["chart/bars"] 访问。让我们重新定义它并添加一个全局应用程序事件:
class bars extends gantt.views["chart/bars"] {
/**
* Sets action of bar item click
* @param {(string|number)} id - ID of the clicked item
*/
ItemClickHandler(id) {
super.ItemClickHandler(id);
// the check is optional, leave it if
// you do not want to track
// clicks on group items in
// display:"resources"
if (!this.Bars.getItem(id).$group) {
this.app.callEvent("onTaskClick", [id]);
}
}
}
接下来,应用覆盖:
webix.ui({
view: "gantt",
id:"gtt",
url: "https://docs.webix.com/gantt-backend/",
override: new Map([
[gantt.views["chart/bars"], bars]
])
});
现在您可以像这样跟踪事件:
gantt1.$app.attachEvent("onTaskClick", id => {
webix.message("Clicked " + id);
});
如果您希望在 gantt obj 本身而不是其 $app 属性 上进行此活动,您可以“引导”该活动:
webix.protoUI({
name:"my-gantt",
$init: function(){
this.$app.attachEvent("app:task:click", id => {
this.callEvent("onTaskClick", [id]);
});
}
}, webix.ui.gantt);
webix.ui({
view: "my-gantt",
id:"gtt",
url: "https://docs.webix.com/gantt-backend/",
override: new Map([
[gantt.views["chart/bars"], bars]
])
});
...然后像通常的 Webix 小部件事件一样收听它:
gantt1.attachEvent("onTaskClick", id => {
webix.message("Clicked " + id);
});
整体例子是https://snippet.webix.com/p0sardik
如果您还想跟踪 Tree 的点击次数,则需要以类似的方式覆盖 gantt.views.tree(重新定义 ItemClickHandler 方法)。