的問題是,該行選擇處理鼠標的點擊,所以我們要確保我們不允許點擊事件傳播到行選擇處理程序,我們可以使用方法event.stopPropagation
執行此操作。
爲了得到這個工作,我首先更改了ItemViewModel
構造函數來執行實際的導航。
function ItemViewModel(name, age) {
var self = this;
self.name = name;
self.age = age;
self.ageUrl = "/Home/Index/" + self.age;
function navigateTo(url){
// Before navigation we want to stop propagation of the event to avoid
// other handlers to handle the click and replace the url (this will
// ensure the row selection isn't triggered by clicking the age link)
event.stopPropagation();
window.location.href = url;
}
self.navigateToName = function(){
navigateTo("/Home/Index?Name=" + self.name);
};
self.navigateToAge = function(){
navigateTo(self.ageUrl);
};
};
然後我更新了您的模板到ItemViewModel
對象使用的屬性和方法。
cellTemplate: "<a data-bind='click: $parent.entity.navigateToAge, attr: {href: $parent.entity.ageUrl}, text: $parent.entity.age'></a>"
最後還更新了行選擇處理程序使用ItemViewModel
對象的方法。
afterSelectionChange: function (rowItem, event) {
if (event.type == 'click') {
rowItem.entity.navigateToName();
}
}
做這些改變了我的一切運作良好(如果我把它放在一個自定義的HTML頁面,因爲的jsfiddle是不是導航非常熱衷)之後。
你可以展示一些代碼,或者更好的仍然是一個工作JSfiddle的問題 – Tanner
看看你的問題歷史,你已經問了9,有19個答案,只有標記爲1被接受。沒有答案有用嗎?我建議你標記最能幫助你的答案,首先讓所有有同樣問題的人都能看到固定/幫助你的問題,其次是給那些花時間幫助你的人留下一些功勞。如果沒有答案可以幫助解決問題,您可以用最終解決方案回答自己的問題,並將自己的答案標記爲正確。 – Tanner
謝謝製革商。我將標記爲接受爲我工作的答案。我會發布代碼供您參考。 –