使用代码中的模板实例化 WinJS.UI.ListView 时出错
Error when instantiating WinJS.UI.ListView with template from code
在创建包含 WinJS.UI.ListView
的自定义 WinJS 控件的过程中,我试图允许用户为模板传递选择器。
但是,无论我是否像您期望的那样在 HTML 页面中“预先创建”了模板:
<div data-win-control="WinJS.Binding.Template"> <!-- ... --> </div>
如果我查询元素并从以下代码创建模板,也不会:
var template = new WinJS.Binding.Template(document.querySelector(selector));
当我开始实例化 ListView 并将模板元素本身(或其 winControl
属性)传递给 ListView 的 itemTemplate
选项时,这样:
new WinJS.UI.ListView(elem, { itemTemplate: template.winControl });
我收到以下错误:
Exception is about to be caught by JavaScript library code at line 11562, column 21 in ms-appx://microsoft.winjs.2.0/js/base.js
0x800a01b6 - JavaScript runtime error: Object doesn't support property or method '_renderItemImpl'
我试图追溯一下,但在 base.js
中迷路了。希望其他人对此有 运行。
注意:我已将解决方法作为答案。
我能够开始工作的唯一解决方法是在代码中实例化模板,然后在实例化 ListView 时将函数传递给 itemTemplate
选项。关于此处预期内容的文档很少,但所有通过代码实例化 ListView 的演示都使用模板函数,所以我认为这是实现这一目标的唯一方法。
new WinJS.UI.ListView(elem, {
itemTemplate: function (promise) {
return promise.then(function (item) {
return resultsTemplate.render(item.data);
});
}
});
确保 Binding.Template
的声明性标记在您尝试使用它之前已被处理。您可以使用 WinJS.UI.processAll()
.
处理声明性标记
如果您以声明方式创建 ListView
和 Binding.Template
,请确保 Binding.Template
出现在您的标记中的第一个位置,以便在 [=] 之前完成处理12=] 尝试消耗它。
Check out this sample 创建带有声明性标记的 ListView 和模板。
在创建包含 WinJS.UI.ListView
的自定义 WinJS 控件的过程中,我试图允许用户为模板传递选择器。
但是,无论我是否像您期望的那样在 HTML 页面中“预先创建”了模板:
<div data-win-control="WinJS.Binding.Template"> <!-- ... --> </div>
如果我查询元素并从以下代码创建模板,也不会:
var template = new WinJS.Binding.Template(document.querySelector(selector));
当我开始实例化 ListView 并将模板元素本身(或其 winControl
属性)传递给 ListView 的 itemTemplate
选项时,这样:
new WinJS.UI.ListView(elem, { itemTemplate: template.winControl });
我收到以下错误:
Exception is about to be caught by JavaScript library code at line 11562, column 21 in ms-appx://microsoft.winjs.2.0/js/base.js
0x800a01b6 - JavaScript runtime error: Object doesn't support property or method '_renderItemImpl'
我试图追溯一下,但在 base.js
中迷路了。希望其他人对此有 运行。
注意:我已将解决方法作为答案。
我能够开始工作的唯一解决方法是在代码中实例化模板,然后在实例化 ListView 时将函数传递给 itemTemplate
选项。关于此处预期内容的文档很少,但所有通过代码实例化 ListView 的演示都使用模板函数,所以我认为这是实现这一目标的唯一方法。
new WinJS.UI.ListView(elem, {
itemTemplate: function (promise) {
return promise.then(function (item) {
return resultsTemplate.render(item.data);
});
}
});
确保 Binding.Template
的声明性标记在您尝试使用它之前已被处理。您可以使用 WinJS.UI.processAll()
.
如果您以声明方式创建 ListView
和 Binding.Template
,请确保 Binding.Template
出现在您的标记中的第一个位置,以便在 [=] 之前完成处理12=] 尝试消耗它。
Check out this sample 创建带有声明性标记的 ListView 和模板。