0

我在 Enyo 中使用了一个窗口视图,它基本上从数据库中获取数据,并且基于 no。获取项目,动态创建多个按钮。单击任何按钮时,将再次调用数据库以获取其他项目集。获取的项目需要作为按钮动态添加到 <ul> 项目中。这是由代码完成的 -

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 组件中。

该文件的完整代码可在@https ://gist.github.com/sangramanand/ad665db9cd438001254a获得

任何帮助,将不胜感激。谢谢!!!

4

2 回答 2

2

我不确定这是不是这样做方法,但是当我动态创建子组件时,我会添加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();
}
于 2013-06-13T13:42:15.240 回答
1

当 testPOSView 在异步调用后运行以获取数据库结果时,您很可能会丢失指向此的指针。

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

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

顺便说一句,如果你正确地绑定你的函数,你可能会消除所有 me = this tomfoolery。

于 2013-06-05T15:40:50.277 回答