KnockOut KoGrid:如何在koGrid中进行行双击和链接?

时间:2014-02-21 10:01:57

标签: knockout.js kogrid

更新

请检查并建议如何将列值作为koGrid中的链接以及如何在kogrid中同时具有双击功能,即,年龄列作为链接​​,当点击时将我带回家/关于页面和当我双击任何一行时它会带我回家/索引页面。

[here]:http://jsfiddle.net/LRY2U/

 {
field: "age", 
displayName: "Age",
cellTemplate: "content"
 }

由于 普里

1 个答案:

答案 0 :(得分:1)

问题是行选择处理鼠标单击,因此我们要确保不允许click事件传播到行选择处理程序,我们可以使用方法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不太热衷于导航)。