1

我有一个导航应用程序,我想让将要加载到的第二个页面default.html在就绪部分执行一个功能。

我写home.js了以下代码:

(function () {
    "use strict";

    WinJS.UI.Pages.define("/pages/home/home.html", {
        // This function is called whenever a user navigates to this page. It
        // populates the page elements with the app's data.
        ready: function (element, options) {
            // TODO: Initialize the page here.

            var articlesList;

            articlesList = new WinJS.Binding.List();
            var publicMembers = { ItemList: articlesList };
            WinJS.Namespace.define("DNZ", publicMembers);



        },

        RSSFeedHandler: function getRssFeed() {
            WinJS.xhr({ url: "http://feeds.feedburner.com/dotnetzone?format=xml" }).then(function (rss) {
                var items = rss.responseXML.querySelectorAll("item");

                for (var n = 0; n < items.length; n++) {
                    var article = {};
                    article.title = items[n].querySelector("title").textContent;
                    article.link = items[n].querySelector("link").textContent;
                    article.description = items[n].querySelector("description").textContent;
                    article.pubDate = items[n].querySelector("pubDate").textContent;
                    articlesList.push(article);
                }
            });
        }

    });
})();

但这在将其运行到调试器时会导致问题;它停止了。

我的home.html页面包含以下标签:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>homePage</title>

    <!-- WinJS references -->
    <link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet" />
    <script src="//Microsoft.WinJS.1.0/js/base.js"></script>
    <script src="//Microsoft.WinJS.1.0/js/ui.js"></script>

    <link href="/css/default.css" rel="stylesheet" />
    <link href="/pages/home/home.css" rel="stylesheet" />
    <script src="/pages/home/home.js"></script>
</head>
<body>
    <!-- The content that will be loaded and displayed. -->
    <div class="fragment homepage">
        <div id="main">
            <div id="DNZItemTemplate" data-win-control="WinJS.Binding.Template" style="display: none;">
                <div class="listItemTemplate" style="width: 173px; height: 100px;">
                    <div class="listItemTitle" data-win-bind="innerText: title" style="width: 173px; height: 100px;"></div>
                    <div class="listItemImage" data-win-bind="innerText: pubDate" style="width: 173px; height: 100px;"></div>
                    <!--<div class="listItemTitle" data-win-bind="innerText: link">
                    </div>-->
                </div>
            </div>
            <header aria-label="Header content" role="banner">
                <button class="win-backbutton" aria-label="Back" disabled type="button"></button>
                <h1 class="titlearea win-type-ellipsis">
                    <span class="pagetitle">Καλως ήρθατε!</span>
                </h1>
            </header>
            <section aria-label="Main content" role="main">
                <section id="content">
                    <div id="articlelist" data-win-control="WinJS.UI.ListView" data-win-options="{ itemDataSource: DNZ.ItemList.dataSource, itemTemplate: DNZItemTemplate }"></div> 
                </section>
            </section>
            </div>
    </div>
</body>
</html>

我认为问题出在我尝试将项目放入列表视图时!您对我必须编写它以在加载getRSSFeed时运行该函数的方式有任何想法吗?home.html

4

1 回答 1

1

为了让文章列表在 RSSFeedHndler 方法中可见,您需要将其设置为页面对象的属性,如下所示:

(function () {
"use strict";

WinJS.UI.Pages.define("/pages/home/home.html", {
    articlesList:null,
    // This function is called whenever a user navigates to this page. It
    // populates the page elements with the app's data.
    ready: function (element, options) {
        // TODO: Initialize the page here.

        // var articlesList;
        this.articlesList = new WinJS.Binding.List();

        var publicMembers = { ItemList: articlesList };
        WinJS.Namespace.define("DNZ", publicMembers);
    },

    RSSFeedHandler: function getRssFeed() {
        var _this=this;
        WinJS.xhr({ url: "http://feeds.feedburner.com/dotnetzone?format=xml" }).then(function (rss) {
            var items = rss.responseXML.querySelectorAll("item");

            for (var n = 0; n < items.length; n++) {
                var article = {};
                article.title = items[n].querySelector("title").textContent;
                article.link = items[n].querySelector("link").textContent;
                article.description = items[n].querySelector("description").textContent;
                article.pubDate = items[n].querySelector("pubDate").textContent;
                _this.articlesList.push(article);
            }
        });
    }

});

})();

于 2013-04-01T08:44:36.760 回答