Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 WinJS运行时错误_Javascript_Winjs - Fatal编程技术网

Javascript WinJS运行时错误

Javascript WinJS运行时错误,javascript,winjs,Javascript,Winjs,我正在使用JavaScript在Visual Studio中制作提要阅读器,当我运行它时,我得到一个错误: 0x800a138f - JavaScript runtime error: Unable to get property 'addEventListener' of undefined or null reference 受影响的代码是: articlelistElement.addEventListener("iteminvoked", itemInvoked); articleL

我正在使用JavaScript在Visual Studio中制作提要阅读器,当我运行它时,我得到一个错误:

0x800a138f - JavaScript runtime error: Unable to get property 'addEventListener' of undefined or null reference
受影响的代码是:

articlelistElement.addEventListener("iteminvoked", itemInvoked);
articleListElement是指引用WinJS.UI.Listview的变量


谢谢你的帮助

如果document.getElementByIdarticlelist返回null,则必须在实际加载DOM之前尝试添加侦听器

如果你开始使用空白项目模板,那么在Debug .js中你会看到这个代码:

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // TODO: This application has been newly launched. Initialize
            // your application here.
        } else {
            // TODO: This application has been reactivated from suspension.
            // Restore application state here.
        }
        args.setPromise(WinJS.UI.processAll());
    }
};
在调用此激活的事件之前,DOM不会准备就绪,getElementById可以返回null。有关激活序列的完整运行,请参阅我的免费电子书第3章

如果您使用的是导航或网格应用程序模板,则需要将该初始化代码放在页面控件的ready方法或processed方法中。使用导航模板,您将在pages/home/home.js中看到这些代码。我的免费电子书的同一章谈到了页面控制

这是第一步,如果您在正确的时间调用getElementById,那么它应该返回声明ListView的div

不过,还有更多的内容,因为要将事件处理程序正确地附加到WinJS控件,必须确保该控件已实例化。这是Win Juj.U.I.过程中所有空白模板代码中相同的调用也自动作为加载页控件的一部分。 或者,在单个元素及其子元素(而不是整个文档)中工作,通过DOM查找数据和控件属性。当它找到一个选项时,如果您提供了一个选项,它将解析datawinoptions属性,然后使用解析后的选项对象调用datawincontrol中标识的构造函数

在此之前,声明控件的位置将只是一个div,不包含任何其他控件结构

对于页面控件,同样,在processed或ready方法中,控件应该被实例化。在空白模板中,需要将完成的处理程序附加到Wijs.UI.Purrals:

args.setPromise(WinJS.UI.processAll().then(function () {
    //Controls have been instantiated, do initialization here

    //Note that calling .then and not .done is necessary because we need to return a promise
    //to args.setPromise.
});
此时,document.getElementByIdarticlelist应该可以让您访问ListView的主机div

最后一步是,要将处理程序附加到WinJS控件事件,必须将侦听器添加到控件对象,而不是主机div,这是通过该主机元素的.winControl属性获得的。因此,您的代码需要如下所示:

articlelistElement.winControl.addEventListener("iteminvoked", itemInvoked);

看起来您的articlelistElement为null或未定义。是时候使用受信任的调试器了。显然,articlelistElement未定义。您在哪里定义它?您可能有一个输入错误:articlelistElement和articlelistElement我这样定义articlelistElement,就在受影响的代码之前。:var articlelistElement=document.getElementByIdarticlelist;此外,articlelist在HTML文件中声明如下:使用调试器后,它为null。