我想将一些 Ext 组件渲染到XTemplate
. 我们希望能够灵活地使用 anXTemplate
来呈现 HTML,但保留使用 Ext 组件而不是普通的旧 HTML 元素的样式、行为和处理程序。
我目前正在使用Ext.Button
. 在模板中,我正在编写一个占位符 div,如下所示:
<div id="paceholder-1"></div>
在我调用apply()
了模板之后,我创建了一个新的 Ext 组件并像这样渲染它:
this._replacePlaceholders.defer(1, this, [html, 'placeholder-1', collection]);
该_replacePlaceholders
函数如下所示:
_replacePlaceholders: function(html, id, collection) {
var emailField = new Ext.form.TextField({
emptyText: 'Email address',
hideLabel: true
});
var downloadButton = new Ext.Button({
text: 'Download as...',
icon: 'images/down.png',
scope: this,
menu: this._createDownloadOptionsMenu(collection) // Create Menu for this Button (works fine)
});
var form = new Ext.form.FormPanel({
items: [emailField, downloadButton]
});
downloadButton.render(html, id);
}
这可以正常工作并将按钮正确呈现到 html 中。按钮菜单按预期运行。
replacePlaceholders
但是,如果我更改to的最后一行,emailField.render(html, id);
或者form.render(html, id);
我得到一个 javascript 错误。
TypeError: ct is null
ct.dom.insertBefore(this.el.dom, position);
ext-all-debug.js (line 10978)
我有点困惑,因为从文档中我可以看出,调用的render()
方法将是相同的(来自Ext.Component
)。但是我玩了一些游戏,似乎无法追踪这里发生的事情。
那么这些组件的行为与Ext.Button
. 是否可以呈现一个Ext.form.TextField
或一个Ext.form.FormPanel
或任何让我在 mt XTemplate html 中使用 Ext 文本字段的东西?
注意。我正在使用 ExtJS 3.3.1 并且没有机会升级版本。我相信 ExtJS 4 的功能会让我做的事情变得更容易。
谢谢!