0

いくつかのアイテムがあり、ボタンを押してお気に入りとしてマークします。コードは次のとおりです。

function AddToFavorites() {
    //called when a shop is added as as a favorite one.
    //first we check if already is favorite
    var favoritesArray = getStoreArray();
    var alreadyExists = exists();
    if (!alreadyExists) {
        favoritesArray.push(itemHolder);
        var storage = window.localStorage;
        storage.shopsFavorites = JSON.stringify(favoritesArray);
    }   
}

function exists() {
    var alreadyExists = false;
    var favoritesArray = getStoreArray();
    for (var key in favoritesArray) {
        if (favoritesArray[key].title == itemHolder.title) {
            //already exists
            alreadyExists = true;
        }
    }
    return alreadyExists;
}

function getStoreArray() {
    //restores our favorites array if any or creates one
    var storage = window.localStorage;
    var favoritesArray = storage.shopsFavorites;
    if (favoritesArray == null || favoritesArray == "") {
        //if first time
        favoritesArray = new Array();
    } else {
        //if there are already favorites
        favoritesArray = JSON.parse(favoritesArray);
    }
    return favoritesArray;
}

そして、それらをリストとして表示するための favorites.html があります。問題は、項目を追加または削除するたびにリストが自動的に更新されないことです。

そのための私のコードは次のとおりです。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Αγαπημένα</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="favoritesDetails.css" rel="stylesheet" />
    <script src="favoritesDetails.js"></script>
</head>
<body>
    <div class="favoritesDetails fragment">
        <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">
                <div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template" style="display: none">
        <div class="mediumListIconTextItem">
            <img src="#" class="mediumListIconTextItem-Image" data-win-bind="src: picture" />
            <div class="mediumListIconTextItem-Detail">
                <h4 data-win-bind="innerText: title"></h4>
                <h6 data-win-bind="innerText: text"></h6>
            </div>
        </div>
    </div>

    <div id="basicListView" data-win-control="WinJS.UI.ListView" 
        data-win-options="{itemDataSource : DataExample.itemList.dataSource, 
            itemTemplate: select('#mediumListIconTextTemplate')}">
    </div>
        </section>
    </div>
</body>
</html>

JavaScript コードは次のとおりです。

// For an introduction to the Page Control template, see the following documentation:
// http://go.microsoft.com/fwlink/?LinkId=232511
var dataArray = [], shopsArray = [];

(function () {
    "use strict";

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;
    var nav = WinJS.Navigation;
    var ui = WinJS.UI;

    shopsArray = getStoreArray();
    if (shopsArray) {
        for (var key in shopsArray) {
            var group = { title: shopsArray[key].title, text: shopsArray[key].subtitle, picture: shopsArray[key].backgroundImage, description: shopsArray[key].description, phoneNumbers: shopsArray[key].content };
            dataArray.push(group);
        }
        var dataList = new WinJS.Binding.List(dataArray);

        // Create a namespace to make the data publicly
        // accessible. 
        var publicMembers =
            {
                itemList: dataList
            };
        WinJS.Namespace.define("DataExample", publicMembers);
    }

    WinJS.UI.Pages.define("/pages/favoritesDetails/favoritesDetails.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) {
        },

        unload: function () {
        },

        updateLayout: function (element, viewState, lastViewState) {
        }    
    });
})();

function getStoreArray() {
    //restores our favorites array if any or creates one
    var storage = window.localStorage;
    var favoritesArray = storage.shopsFavorites;
    if (favoritesArray == null || favoritesArray == "") {
        //if first time
        favoritesArray = new Array();
    } else {
        //if there are already favorites
        favoritesArray = JSON.parse(favoritesArray);
    }
    return favoritesArray;
}

新しいお気に入りが localDB に保存/削除されたときに、どうすればお気に入りの HTML ページを更新できますか? そこにイベントリスナーを追加できますか?

4

1 に答える 1

1

お気に入りを保存するコードは同じアプリの一部ですか?

もしそうなら、ListView へのバインドに使用している基になる WinJS.Binding.list にお気に入りを追加し、更新されたリスト情報を DB に保存することを検討します。リストビュー。

ListView を動的に更新する方法を示す次のサンプルをご覧ください。

http://code.msdn.microsoft.com/windowsapps/ListView-custom-data-4dcfb128/sourcecode?fileId=50893&pathId=1976562066

それが役立つことを願っています!

于 2013-03-14T02:46:59.810 に答える