我有一个表格,一个搜索链接作为它的列之一。当我单击搜索时,会弹出一个带有搜索框选项的 ajax 弹出扩展器面板。搜索是通过 web 服务调用完成的,结果绑定在面板内的表格中。我使表格行可点击,我希望点击的行绑定到第一个表格。我遇到的问题是跟踪每一行。当我单击面板内的一行时,第一个表中的所有行都被绑定,而不仅仅是那一行。我不知道如何跟踪我点击了哪一行。非常感谢任何帮助,我已经为此苦苦挣扎了好几天。这是我的代码:
JavaScript
$(document).ready(function () {
MyAccountModel = new AccountViewModel()
ko.applyBindings(MyAccountModel );
})
var passedmodel;
var MyAccountModel;
var AccountViewModel = function () {
var self = this;
self.model = {};
self.invoice = ko.observableArray([new invoice()]);
//Ajax Call to search accounts (working and binding fine)
self.GetAccounts = function () {
var searchstring = document.getElementById("<%=txtaccountsearch.ClientID %>").value;
var DTO = { 'searchstring': searchstring };
var AccountURL = "ajaxwebservicecalls.asmx/GetAccount";
$.ajax({
type: "Post",
url: AccountURL,
data: JSON.stringify(DTO),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function add(msg) {
passedmodel = ko.mapping.fromJS(msg.d);
MyMasterviewModel.MyAccountModel.invoice(passedmodel);
},
error: ONAccountFailure
});
}
function ONAccountFailure(xhr, ex) {
alert(xhr.responseText);
}
self.CurrentDisplayAccount = ko.observableArray([new CurrentDisplayAccount()])
//this is to select a row inside the panel
self.selectAccount = function (item) {
self.CurrentDisplayAccount(item);
};
HTML
我不会显示 Popup Extender/Panel 代码以节省空间。这是 knokcout 表绑定
<table id="Table3">
<tr>
<th> Account Code </th>
<th> Description </th>
<th> Account Type </th>
<th> Purpose </th>
</tr>
<tbody data-bind="foreach:MyAccountModel.invoice().GLAccounts">
<tr data-bind="click: MyMasterviewModel.MyAccountModel.selectAccount">
<td data-bind=" text: $data.FormattedGLAccount"></td>
<td data-bind="text: $data.GLAccountDescription"></td>
<td data-bind="text: $data.GLAccountTypeName" ></td>
<td data-bind="text: $data.GLAccountLongDescription" ></td>
</tr>
</tbody>
</table>
现在,每当我单击上表的任何行时,结果都会绑定到下表的两行。但是,我只想将它绑定到我单击搜索的行。
<td align="left">
<table border="0" cellspacing="0" cellpadding="0">
<th> Account </th>
<th> Amount </th>
<th> Reference </th>
<th> Description </th>
<tbody databind="foreach: MyAccountModel.CurrentDisplayAccount()" >
<td >
<input data-bind="text: $data.FormattedGLAccount" />
</td>
<td >
<input data-bind="text:$data.GLAccountDescription"/>
</td>
<td >
<input data-bind="text: $data.GLAccountTypeName" />
</td>
<td >
<input data-bind="text: $data.GLAccountLongDescription" /> </td>
<td>
<asp:HyperLink runat="server" ID="HyperLink1" NavigateUrl="javascript:$find('ModalPopupExtenderaccountsearchbehav').show();" Text="Search" />
</td>
</tbody>
<--second row:-->
<tr>
<td >
<input data-bind="text: $data.FormattedGLAccount" /> </td>
<td >
<input data-bind="text: $data.GLAccountDescription" /> </td>
<td >
<input data-bind="text: $data.GLAccountTypeName" /> </td>
<td >
<<input data-bind="text: $data.GLAccountLongDescription" />
</td>
<td >
<asp:HyperLink runat="server" ID="HyperLink2" NavigateUrl="javascript:$find ('ModalPopupExtenderaccountsearchbehav').show();" Text="Search" />
</td>
</tr>
</table>
</td>
我尝试改变语法绑定,但它仍然保持绑定。我尝试了一个 foreach 循环,但没有成功。我在想我需要获取 thr 行的索引,但我不知道该怎么做。请帮忙!!
更新
这是一个指向我正在尝试做的事情的小提琴链接http://jsfiddle.net/KwvrZ/7/。我希望能够单击第一个表中的任何行,并且该行应该绑定到第二个表。如果我然后单击第一个表中的不同行,它应该绑定到第二个表的第二行。希望这是有道理的。
我真的需要一些帮助!