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