Windows 8 如何在WinJS ListView中使用可观察对象

Windows 8 如何在WinJS ListView中使用可观察对象,windows-8,windows-runtime,winjs,Windows 8,Windows Runtime,Winjs,我想在Windows8RT(开发者预览自Build2011)(使用JavaScript)中的ListView中使用一个可观察的对象 下面的代码似乎应该可以工作。它有一个简单的模板,用于在HTML中显示每个对象的标题和描述,以及WinJS.UI.Listview组件的基本用法 我希望看到一个对象列表,但当列表包含时,总是会看到“等待微调器” 实验上,我注意到,如果代码没有将整个列表(除了3个)转换为可观察的,那么列表就会显示出来。通过进行一些调试,它似乎与时间有关,WinJS框架由于某种原因(在S

我想在Windows8RT(开发者预览自Build2011)(使用JavaScript)中的ListView中使用一个可观察的对象

下面的代码似乎应该可以工作。它有一个简单的模板,用于在HTML中显示每个对象的标题和描述,以及WinJS.UI.Listview组件的基本用法

我希望看到一个对象列表,但当列表包含时,总是会看到“等待微调器”

实验上,我注意到,如果代码没有将整个列表(除了3个)转换为可观察的,那么列表就会显示出来。通过进行一些调试,它似乎与时间有关,WinJS框架由于某种原因(在ScrollView代码中调用realizeItems时,错误计数的情况发生得很深)计算错误,无法完全呈现ListView(因为一些对象处于“挂起状态”)。如果我注释掉
enableFirstChanceException
函数调用,它在比较函数itemChanged中的两个对象时失败(但我不知道是否相关)(不支持值参数中的循环引用)

你知道如何在可观测物体上实现这一点吗

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=1024, height=768" />
    <title>WinWebApp1</title>
    <!-- WinJS references -->
    <link rel="stylesheet" href="/winjs/css/ui-dark.css" />
    <script type="text/javascript" src="/WinJS/js/base.js"></script>
    <script type="text/javascript" src="/WinJS/js/ui.js"></script>
    <script type="text/javascript" src="/WinJS/js/binding.js"></script>
    <script type="text/javascript" src="/WinJS/js/controls.js"></script>
    <script type="text/javascript" src="/WinJS/js/res.js"></script>
    <script type="text/javascript" src="/WinJS/js/animations.js"></script>
    <script type="text/javascript" src="/WinJS/js/uicollections.js"></script>
    <script type="text/javascript" src="/WinJS/js/wwaapp.js"></script>
    <!-- WinWebApp1 references -->
    <link rel="stylesheet" href="/css/default.css" />
    <script src="/js/default.js"></script>
</head>
<body>
    <div id="itemTemplate" data-win-control="WinJS.Binding.Template" >
        <div class="itemContainer">

            <!-- Displays the "title" field. -->
            <div class="itemTitle" data-win-bind="innerText: title">
            </div>

            <!-- Displays the "description" field.  -->
            <div class="itemDescription" data-win-bind="innerText: description">
            </div>

        </div>
    </div>

    <div data-win-control="WinJS.UI.ViewBox">
        <div class="fixed-layout">
            <div id="basicListView" data-win-control="WinJS.UI.ListView" data-win-options="{itemRenderer: itemTemplate}">
            </div>
        </div>
    </div>
</body>
</html>

WinWebApp1
还有JavaScript:

(function () {
    'use strict';
    // Uncomment the following line to enable first chance exceptions.
    //Debug.enableFirstChanceException(true);

    var myData = [
    { title: "Banana", description: "Banana Frozen Yogurt"},
    { title: "Orange", description: "Orange Sherbet"},
    { title: "Vanilla", description: "Vanilla Ice Cream"},
    { title: "Mint", description: "Mint Gelato"},
    { title: "Strawberry", description: "Strawberry Sorbet"},
    { title: "Kiwi", description: "Kiwi Sorbet" }
    ];

    // this works:
    //var myDataSource = new WinJS.UI.ArrayDataSource(myData);

    // this does not:
    for (var i = 0; i < myData.length ; i++) {
        myData[i] = WinJS.Binding.as(myData[i]);
    }
    var myDataSource = new WinJS.UI.ArrayDataSource(myData);

    document.addEventListener("DOMContentLoaded", function (e) {
        WinJS.UI.processAll()
            .then(function () {
                var basicListView = WinJS.UI.getControl(document.getElementById("basicListView"));
                basicListView.dataSource = myDataSource;

            // when the observable works correctly, this should work (and live change the list)
            //setTimeout(function () {
            //    basicListView.refresh();
            //    myData[0].title = "Yellow Banana";
            //    myData[5].title = "Kiwisicle";
            //}, 3000);
        });
    });
    WinJS.Application.start();
})();
(函数(){
"严格使用",;
//取消注释以下行以启用首次机会异常。
//Debug.enableFirstChanceException(true);
var myData=[
{标题:“香蕉”,描述:“香蕉冷冻酸奶”},
{标题:“橙色”,描述:“橙色果子露”},
{标题:“香草”,描述:“香草冰淇淋”},
{标题:“薄荷”,描述:“薄荷冰淇淋”},
{标题:“草莓”,描述:“草莓冰糕”},
{标题:“猕猴桃”,描述:“猕猴桃冰糕”}
];
//这项工作:
//var myDataSource=new WinJS.UI.ArrayDataSource(myData);
//这并不是:
对于(var i=0;i
你有没有想过这一点?我可能遇到了这个问题。我想我遇到了另一个问题,我的可观测对象更新正确。我的问题是语义缩放控件没有正确更新其布局。你有没有发现这个问题?我可能遇到了这个问题。我想我遇到了另一个问题,我的可观测对象更新正确。我的问题是语义缩放控件没有正确更新其布局。