Jquery Knockout.js、foreach和afterRender
在obervable数组中的最后一个值被渲染后,是否有方法触发事件? 我有以下代码: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> <
<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;
}
}