对Javascript Metro应用程序中缩小视图的分组项进行语义缩放

时间:2012-07-06 21:51:29

标签: windows-8 microsoft-metro windows-runtime

我正在为我的应用程序添加语义缩放,并且我在缩小列表视图中遇到数据绑定问题。 在正常(放大)列表视图中,我绑定了分组数据,它呈现得很好。 对于缩小列表视图,我想渲染相同的分组数据(相同的itemDataSource和groupDataSource),但使用不同的itemTemplate和groupTemplate(与普通视图相同但更小)。

我遇到的问题是,当我缩小时,我在ui.js第2117行收到错误“0x800a138f - JavaScript运行时错误:Object.defineProperty:参数不是对象”。

我尝试将缩小的listview itemDataSource属性绑定到groups.dataSource集合,而不是设置groupDataSource属性(就像我在网上找到的所有示例一样),我工作正常。

为什么缩小后的视图不会像普通视图一样呈现分组项目?

修改 看起来像缩小视图的行为方式与普通(放大)列表视图不同。当放大视图同时接受itemDataSource和groupDataSource时,缩小视图仅接受itemDataSource。 我编辑了Microsoft Official Semantic Zoom Sample(scenario2.html)并更改了zoomedOutListView以使用myGroupedList.dataSource作为itemDataSource,并出现了同样的问题。

之前的代码:

        <div id="zoomedOutListView"
            data-win-control="WinJS.UI.ListView"
            data-win-options="{ 
                itemDataSource: myGroupedList.groups.dataSource, 
                itemTemplate: semanticZoomTemplate, 
                selectionMode: 'none', 
                tapBehavior: 'invoke', 
                swipeBehavior: 'none' 
            }"
        ></div>

之后的代码(再现问题):

            <div id="zoomedOutListView"
            data-win-control="WinJS.UI.ListView"
            data-win-options="{ 
                itemDataSource: myGroupedList.dataSource, //originally was myGroupedList.groups.dataSource
                itemTemplate: semanticZoomTemplate, 
                selectionMode: 'none', 
                tapBehavior: 'invoke', 
                swipeBehavior: 'none' 
            }"
        ></div>

感谢。 迭

1 个答案:

答案 0 :(得分:1)

如果您使用的是自定义IListDataSource,请确保实现itemFromKey方法。