从dijit内部调用父小部件函数复选框更改函数在dgrid内部lopcated

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从dijit内部调用父小部件函数复选框更改函数在dgrid内部lopcated相关的知识,希望对你有一定的参考价值。

我在ondemand网格中有一个dijit表单复选框。 Ondemand网格是dojo小部件的一部分。我想在复选框的更改事件中调用窗口小部件中的一个函数,但我似乎无法获得对窗口小部件的引用。这是我的代码:

TicketUnMarkedSet: function (GridData) {

        //set the unmarked ticket information
        gridStore = new Memory({ data: GridData, idProperty: "ID" });
        grid = new (declare([OnDemandGrid, DijitRegistry]))({
            store: gridStore,
            columns: {
                CheckedOut: {
                    label: "CO",
                    renderCell: function (object, cell) {
                        var CO = true; // check the checked out check box based on data from db
                        if (object.CheckedOut == "No") {
                            CO = false;
                        }
                        var cellContent = domConstruct.create("div", {});
                        var cbox = new CheckBox({
                            checked: CO,
                            name: "idBox"
                        });
                        cbox.placeAt(cellContent);
                        on(cbox, "change", function (evt) {
                            var Staff = "No";
                            if (evt == true) {//check box is checked, flag ticket as checked out
                                Staff = cookie("LoggedInAs")
                            }

                        this.CheckOutTicket(Staff);//how to call CheckOutTicket function (this is the checkbox)

                        });
                        return cellContent;
                    }
                },
     ..more columns
},
CheckOutTicket: function (Staff){
  alert(Staff);
}

如何获得CheckOutTicket函数的引用?

谢谢

皮特

答案

我找到了解决方法,但可能不是最好的解决方案。在postCreate事件中,我定义了一个引用窗口小部件的全局变量,然后使用该变量从复选框内部的复选事件中调用该函数

另一答案

我建议你用dojo/topic得到你想要的东西。

on(cbox, "change", function (evt) {
    var Staff = "No";
    if (evt == true) {//check box is checked, flag ticket as checked out
        Staff = cookie("LoggedInAs")
    }

    topic.publish("CheckOutTicket", Staff);
});

在您的父窗口小部件中的某个位置,例如在postCreate中

this.own(topic.subscribe("CheckOutTicket", this.CheckOutTicket));

现在您不必关心将处理程序从父窗口小部件传递到子窗口小部件并使用全局变量。

以上是关于从dijit内部调用父小部件函数复选框更改函数在dgrid内部lopcated的主要内容,如果未能解决你的问题,请参考以下文章

如何从子小部件调用父小部件中的函数 |扑

如何从 Flutter 中的子小部件调用父小部件功能

Dijit 小部件构造函数抛出“调用链式构造函数”错误

Dojo dijit.form.select:创建新的选择小部件后,旧小部件的选定值无法更改

调用父窗口小部件函数

如何从 Dijit FilteringSelect 小部件中删除所有选项?