2013-07-25 50 views
2

我想在我的应用程序中实现语义缩放控件。这是我的一个页面的片段:WinJS绑定到嵌套控件

<div id="semanticZoomDiv" data-win-control="WinJS.UI.SemanticZoom"> 

      <div id="zoomedInListView" 
       class="win-selectionstylefilled" 
       data-win-control="WinJS.UI.ListView" 
       data-win-bind="winControl.itemDataSource: groupedList.dataSource; winControl.groupDataSource: groupedList.groups.dataSource;" 
       data-win-options="{ 
       itemTemplate: select('#mediumListIconTextTemplate'), 
       groupHeaderTemplate: select('#headerTemplate'), 
       selectionMode: 'none', 
       tapBehavior: 'none', 
       swipeBehavior: 'none' 
      }"> 
      </div> 

      <div id="zoomedOutListView" 
       data-win-control="WinJS.UI.ListView" 
       data-win-bind="winControl.itemDataSource: groupedList.groups.dataSource;" 
       data-win-options="{ 
       itemTemplate: select('#semanticZoomTemplate'), 
       selectionMode: 'none', 
       tapBehavior: 'invoke', 
       swipeBehavior: 'none' 
      }"> 
      </div> 

     </div> 

问题是,semanticZoomDiv是空的。

但是,如果我删除属性

data-win-control="WinJS.UI.SemanticZoom" 

从semanticZoomDiv 2名列表视图渲染和正确填充数据。看起来WinJS在将数据绑定到嵌套控件方面存在问题? (ListView控件位于SemanticZoom控件内部 - 删除外部SemanticZoom控件数据后正确绑定)。

我设法通过data-win-options使用绑定到全局名称空间来进行语义缩放工作,但我想通过视图模型为我的页面提供数据,因此我尝试使用data-win-bind。

回答

0

我认为这是一个对象范围问题,但目前我不在Win8上进行验证。如果我是对的,你可以从你的JavaScript代码中暴露groupedList与此类似。

WinJS.Namespace.define("YourApp", { 
    groupedList: groupedList, 
}); 

然后将声明性绑定更改为包含YourApp命名空间。这样你的数据不在全局名称空间中。

或者,你可以做数据中的.js文件结合

zoomedInListView.winControl.itemDataSource = groupedList.dataSource; 
zoomedInListView.winControl.groupDataSource = groupedList.groups.dataSource; 
zoomedOutListView.winControl.itemDataSource = groupedList.groups.dataSource; 
+1

谢谢您的输入。我在我的问题中提到我设法使用全局命名空间(就像你指出的那样),但我正在使用视图模型。经过一番研究后,我发现函数processAll不支持嵌套控件(例如,Semantic Zoom内部的ListView) - 对于嵌套ListView,绑定没有初始化。解决方案是为所有嵌套控件的容器执行processAll。 –