从Mobile Service DataSource获取listview的价值

时间:2013-06-17 01:32:38

标签: javascript html5 listview windows-8 winjs

我正在使用WinJS.Binding.List()将Azure移动服务数据绑定到Listview。 如何从列表视图中获取所选的值和索引?

//Javascript
var table = client.getTable('PatientInfo');
var birthCertData = function () {
            table.read().done(function (results) {
                   birthCert = new WinJS.Binding.List(results);
                   listItems.winControl.itemDataSource = birthCert.dataSource;
               });
        };

function selectionChangedHandler() {
//what should I type here to get the selectedCell Value and index?
        }

        listItems.addEventListener("selectionchanged", selectionChangedHandler, false);

这是我的HTML

<div id="TemplateItem" data-win-control="WinJS.Binding.Template" style="display: none">
   <div style="display: -ms-grid; -ms-grid-columns: auto 1fr">
      <div style="-ms-grid-column: 2; margin-left: 5px; height: 40px; text-align: center; vertical-align: middle">
        <h3 data-win-bind="innerText: birthcert"></h3>
      </div>
   </div>
</div>

<div id="listItems" class="win-selectionstylefilled" 
     data-win-control="WinJS.UI.ListView"
     data-win-options="{ itemTemplate: select('#TemplateItem'), 
     layout: {type: WinJS.UI.ListLayout}, 
     selectionMode: 'single', 
     tapBehavior: 'directSelect'}">
</div>

 <div style="margin: 5px 0px 0px 72px; -ms-grid-column: 2">
    <input type="text" id="textInput" />
 </div>

截屏:http://i.stack.imgur.com/Di0BP.png

谢谢

3 个答案:

答案 0 :(得分:1)

通过ListView的selection属性

function selectionChangedHandler(e) {
    var numItemsSelected = listItems.selection.count;
    var indicesSelected = listItems.selection.getIndices();
    var itemsSelected = listItems.selection.getItems();
    ...

}

ISelection界面为您提供了可用于检测选择状态的其他选项。请注意,事件的详细数据(e.detail)将为null,因此如果您想要一般性地获取源ListView,可以通过e.srcElement

进行访问

答案 1 :(得分:1)

这与实际问题无关,但可能对您有所帮助。 目前,您正在等待读取WAMS表的全部内容,然后将listview的数据源设置为整个读取表。 我建议您创建一个本地WinJS.Binding.List,立即将listview的数据源设置为它,然后当您读取WAMS表时,迭代生成的数组并将结果推送到绑定列表。 结果将与您拥有的功能完全相同,但它将是一个更好的模式,并允许在实际数据调用之前完成一些工作。

答案 2 :(得分:0)

 function selectionChangedHandler(e) {

                // get the index of the selected listview item
                var index= e.srcElement.winControl.selection.getIndices();
                // get the object of the selected index
                var odata = birthcert.getAt(test);
                //odata.[key] is the value of the selected listview's item.

            }

            listItems.addEventListener("selectionchanged", selectionChangedHandler, false);