Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Knockout.js、foreach和afterRender_Jquery_Knockout.js - Fatal编程技术网

Jquery Knockout.js、foreach和afterRender

Jquery Knockout.js、foreach和afterRender,jquery,knockout.js,Jquery,Knockout.js,在obervable数组中的最后一个值被渲染后,是否有方法触发事件? 我有以下代码: <table class="resultListTable"> <thead class="header"> <tr> <th>#</th> <th>Customer</th> <th>Status</th> </tr> <

在obervable数组中的最后一个值被渲染后,是否有方法触发事件? 我有以下代码:

<table class="resultListTable">
<thead class="header">
    <tr>
        <th>#</th>
        <th>Customer</th>
        <th>Status</th>
    </tr>
</thead>
<tbody data-bind="foreach: { data: resultList, afterRender: afterRender}">
    <tr class="resultList" data-bind="attr: {id: Rno}">
        <td data-bind="text: Id"></td>
        <td data-bind="text: Customer"></td>
        <td data-bind="text: Status"></td>
    </tr>
</tbody>
</table>

<script>

    function afterRender() {

        $(".resultList").on("click", function (e) {
            if(!exceptionRedirected){
                var url = '~/Home/Detail/' +  $(e.target).closest("tr").attr("id");
                window.location.href = url;
            }
        });
    }

function viewModel(){
    var self = this;
    self.resultList = ko.observableArray([]);
}

function CustStatus(data) {
     var self = this;   
     self.Id = ko.observable(data.Id || '');
     self.Rno = ko.observable(data.Rno || '');
     self.Customer = ko.observable(data.Id || '');
     self.Status = ko.observable(data.Id || '');
}

    var vm = new CustStatus();
    ko.applyBindings(vm);

    /* I get the data from a ajax call somewhere else in the code */

</script>

#
顾客
地位
函数afterRender(){
$(“.resultList”)。在(“单击”上,函数(e){
如果(!exceptionRedirected){
var url='~/Home/Detail/'+$(e.target).closest(“tr”).attr(“id”);
window.location.href=url;
}
});
}
函数viewModel(){
var self=这个;
self.resultList=ko.observatarray([]);
}
功能状态(数据){
var self=这个;
self.Id=ko.observable(data.Id | |“”);
self.Rno=ko.observable(data.Rno | | |“”);
self.Customer=ko.observable(data.Id | |“”);
self.Status=ko.observable(data.Id | |“”);
}
var vm=new CustStatus();
ko.应用绑定(vm);
/*我从代码中其他地方的ajax调用中获取数据*/
对每行数据执行
afterRender
功能。
如何仅在数据数组的末尾执行此操作?

您可以使用click knockout绑定

<tbody data-bind="foreach: { data: resultList}">
    <tr class="resultList" data-bind="attr: {id: Rno}, click: $root.detailClick">
        <td data-bind="text: Id"></td>
        <td data-bind="text: Customer"></td>
        <td data-bind="text: Status"></td>
    </tr>
</tbody>

如果更新数组,但只更改中间元素。它是否不仅重新呈现已更改的元素?作为定制装订可能更好。这是一个很好的建议,但出于某种原因,我没有把它解雇。我猜单击事件将在tr元素上结束?更正:函数detailClick应该在viewmodel中。现在开始编辑我开始工作了:click:detailClick(删除$root。)谢谢Leszek
function viewModel(){
    var self = this;
    self.resultList = ko.observableArray([]);

    self.detailClick = function(custStatus) {
         var url = '~/Home/Detail/' + custStatus.Rno();
         window.location.href = url;
    }
}