在Windows 8 Metro應用程序中,我希望ListViewItems/Tiles在點擊後打開鏈接。問題是點擊時沒有任何反應。與addEventListener我設法調用該項目,但代碼無法打開鏈接。在Win8 Metro應用程序中使用javascript和html的tile上打開url地址應用程序
我將這樣的Tiles存儲在default.js文件中,我想訪問「link」屬性,它們都有一個。之後存在事件偵聽和事件(的SelectItem):
var TileData = [
{ title: "Tile01", picture: "images/2.png", link: "http://www.gmail.com" },
{ title: "Tile02", picture: "images/1.png", link: "http://www.google.com" }
];
var dataList = new WinJS.Binding.List(TileData);
var publicMembers =
{
itemList: dataList
};
WinJS.Namespace.define("DataExample", publicMembers);
WinJS.Application.onmainwindowactivated = function (e) {
if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
WinJS.UI.processAll().then(function() {
var TileList = document.getElementById('TileListView').winControl;
TileList.dataSource = TileData;
TileList.addEventListener('iteminvoked', SelectItem);
});
}
}
function SelectItem(e) {
var selectedItem = TileData[e.detail.itemIndex];
var selectedTileLink = document.getElementById('selectedTileLink');
selectedTileLink.src = selectedItem.link;
console.log('invoke ' + item.data.link);
Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri(selectedTileLink));
}
var app = WinJS.Application;
app.onactivated = function (eventObject) {
if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
if (eventObject.detail.previousExecutionState !== Windows.ApplicationModel.Activation.ApplicationExecutionState.terminated) {
} else {
}
WinJS.UI.processAll(); //It reaches this point
}
};
app.oncheckpoint = function (eventObject) {
};
app.start();
爲ListView模板是這裏的選項,之後ListView控件本身:
<div id="TileItemTemplate" data-win-control="WinJS.Binding.Template">
<div style="width: 200px; height: 100px;">
<img src="#" style="width: 200px; height: 100px;"
data-win-bind="alt: title; src: picture" />
</div>
</div>
<div id="TileListView" data-win-control="WinJS.UI.ListView"
data-win-options="{
itemTemplate: select('#TileItemTemplate'),
itemDataSource : DataExample.itemList.dataSource,
layout:{type:WinJS.UI.GridLayout} }" >
</div>
所以我的問題是,該代碼不會打開我在SelectItem函數中指定的鏈接。我將它存儲在selectedTileLink中,但點擊後沒有任何反應。
有人可以幫我找到我的代碼失敗嗎?
我真的很陌生地鐵發展,我遇到了你寫的事件處理程序的問題。我仍然無法訪問鏈接。 是否有任何選項將「鏈接」存儲爲局部變量?例如:使用_onClick_我會運行一個JS函數,它將「鏈接」存儲到本地變量中,並使用該參數打開Url。 – Lgn 2012-03-31 22:05:20
@Lgn我不太確定你在問什麼。你能更詳細地解釋它嗎?你是否將數據源綁定到列表視圖?在調試器中,是否調用了itemInvoked事件處理程序?謝謝。 – 2012-03-31 23:40:42
我更新了我的問題,顯示了我的代碼,如果問題不多,請看看它。 – Lgn 2012-04-01 11:50:24