1

基本的にhtmlファイルから取得したテキストを表示するWindows 8用のjavascript/HTMLを使用してアプリケーションを作成しています。

グループとアイテムを整理するために data.js ファイルを使用しています。プロパティの 1 つは、アプリケーションのメイン コンテンツを含む html ページの URL を格納する「url」です。

表示するコンテンツを含む html ページから html コードを取得するために、このコードを思いつきました。

WinJS.UI.Fragments.renderCopy(url)
                  .done(function (fragment) {
                  return fragment;
});

data.js の配列内の各項目に対してこのコードを実行し、データをバインドして、コンテンツが HTML ページから取得され、見出し/タイトルが data.js ファイルから取得されるようにするにはどうすればよいですか?

混乱を招いた場合はお詫び申し上げます。助けていただければ幸いです。

ありがとう。

4

1 に答える 1

1

data.js のレイアウトに固執し、独自のデータ クラスを作成しないと仮定すると、リストビューにはカスタム レンダラーを使用します。

このようなもの...

var customRender = WinJS.Utilities.markSupportedForProcessing(function (itemPromise) {
    var currentItem = {};

    return itemPromise.then(function (item) {
        currentItem = item;
        var myDiv = document.createElement("div");
        return WinJS.UI.Fragments.renderCopy("/html/1_BasicFragmentLoad_Fragment.html", myDiv)
    })
    .then(function (fragment) {
        var itemTemplate = WinJS.Utilities.query('.itemtemplate')[0];
        currentItem.data.title = fragment.innerHTML; 

        return itemTemplate.winControl.render(currentItem.data);

    });
}

);

この例では、html フラグメントのコンテンツを data.js の特定のアイテムのタイトルにバインドしています。itemtemplate を更新し、title 要素を textContent ではなく innerHTML にバインドする必要があります。

<h4 class="item-title" data-win-bind="innerHTML: title"></h4>

また、カスタム レンダラーをリストビューに割り当てる必要があります。HTML マークアップでこれを行うか、groupItems.js のテンプレート js をこれに変更するだけです...

 listView.itemTemplate = customRender;

独自のデータ クラスを作成する場合は、カスタマー レンダラーの promise チェーンをクラス コンストラクターに配置して、カスタマー レンダラーを不要にすることができます。

于 2012-08-19T16:16:38.810 に答える