Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在Enyo中动态添加组件(按钮)_Javascript_Enyo - Fatal编程技术网

Javascript 无法在Enyo中动态添加组件(按钮)

Javascript 无法在Enyo中动态添加组件(按钮),javascript,enyo,Javascript,Enyo,我在Enyo中使用了一个窗口视图,它基本上从数据库中获取数据,并根据获取的项目数,动态创建多个按钮。单击任何一个按钮,都会对数据库进行另一次调用,以获取其他项目集。获取的项目需要作为按钮动态添加到项目中。根据《守则》的规定— testPOSView : function(inSender, inEvent) { var data = inEvent.data; console.log(data.tables); enyo.forEach(data.

我在Enyo中使用了一个窗口视图,它基本上从数据库中获取数据,并根据获取的项目数,动态创建多个按钮。单击任何一个按钮,都会对数据库进行另一次调用,以获取其他项目集。获取的项目需要作为按钮动态添加到
    项目中。根据《守则》的规定—

    testPOSView : function(inSender, inEvent) {
            var data = inEvent.data;
            console.log(data.tables);
            enyo.forEach(data.tables, function(table) {
                console.log(table);
                this.$.sectiontablebar.createComponent({
                    kind : 'OB.OBPOSPointOfSale.UI.TablesButton',
                    button :  {
                        kind : 'OB.UI.Section',
                        content: table.tableName,
                        id: table.tableId
                    }
                });
            }, this);
        }
    
    但是,当我单击按钮时,我从DB获得结果,但它们不会添加到sectiontablebar组件中

    文件的完整代码可在@


    任何帮助都将不胜感激。谢谢

    在异步调用获取db结果后运行testPOSView时,很可能会丢失指向此的指针

    在anythingTap函数中(请参阅要点,读者),您可以尝试将要发送的函数绑定到OB.DS.Process:

    this.bindSafely(function(data) {me.doTestPOSView();}))
    

    顺便说一句,如果您正确绑定了函数,您可能可以消除所有的me=这个愚蠢的行为。

    更有可能的是,当testPOSView在异步调用后运行以获取db结果时,您丢失了指向这个的指针

    在anythingTap函数中(请参阅要点,读者),您可以尝试将要发送的函数绑定到OB.DS.Process:

    this.bindSafely(function(data) {me.doTestPOSView();}))
    
    顺便说一句,如果您正确绑定函数,您可能可以消除所有的me=这个愚蠢的行为。

    我不确定这是一种方法,但是当我动态创建子组件时,我会将
    this.render()
    添加到函数的末尾。这将呈现组件,从而显示动态添加的内容

    如果我要重写你的代码,我会这样做:

    testPOSView : function(inSender, inEvent) {
        var data = inEvent.data;
        enyo.forEach(data.tables, function(table) {
            // create the sub-component in "this"
            this.createComponent({
                // and assign the container
                container: this.$.sectiontablebar,
                kind : 'OB.OBPOSPointOfSale.UI.TablesButton',
                button :  {
                    kind : 'OB.UI.Section',
                    content: table.tableName,
                    id: table.tableId
                }
            });
        }, this);
        this.render();
    }
    
    我不确定这样做是否可行,但当我动态创建子组件时,我会在函数末尾添加
    this.render()
    。这将呈现组件,从而显示动态添加的内容

    如果我要重写你的代码,我会这样做:

    testPOSView : function(inSender, inEvent) {
        var data = inEvent.data;
        enyo.forEach(data.tables, function(table) {
            // create the sub-component in "this"
            this.createComponent({
                // and assign the container
                container: this.$.sectiontablebar,
                kind : 'OB.OBPOSPointOfSale.UI.TablesButton',
                button :  {
                    kind : 'OB.UI.Section',
                    content: table.tableName,
                    id: table.tableId
                }
            });
        }, this);
        this.render();
    }