Each element of your LoanDetails array needs to have a separate computed that returns a filtered array of your ABLoans based on the selected DocStandby.
You will notice that each element of LoadDetails has its own ko.computed ( FilteredLoans ) that just returns a filter based on the value of the DocStandby observable. It uses a common source of loans ( ABLoans ) so if that array was ever to be updated then all line item computed will also re-filter.
Here is a basic example that shows you the mechanics invoked, you will need to adapt to your exact object model, specifically how you create your LoadDetail array items.
HTML
<table>
<tbody data-bind="foreach: LoanDetails">
<tr colspan="2">
<td><input type="radio" data-bind="checked: DocStandby, attr: { 'name': SeedID(), 'value': 'DL' }" />Documentary
<input type="radio" data-bind="checked: DocStandby, attr: { 'name': SeedID(), 'value': 'SB' }" />Stand By</td>
</tr>
<tr>
<td>AB Loan:</td>
<td><select data-bind="options: FilteredLoans, value: LoanNum, optionsValue: 'LoanNum', optionsText: 'LoanNum', optionsCaption: 'Choose...'"></select></td>
</tr>
</tbody>
</table>
JAVASCRIPT
var vm = {
LoanDetails: ko.observableArray([]),
ABLoans: ko.observableArray([])
};
var buildRow = function( seed, ABLoans) {
var obj = {
SeedID: ko.observable(seed),
DocStandby: ko.observable(),
LoanNum: ko.observable()
};
// Add to object after obj is created so we can use that instance
// using "this" to read the items DocStandby value
obj.FilteredLoans = ko.computed( function() {
var val = this.DocStandby();
return ABLoans().filter( function( item ) {
return val && item.Type === val;
} );
}, obj);
return obj;
};
vm.ABLoans( [
{ LoanNum: '1-DL', Type: 'DL' },
{ LoanNum: '2-DL', Type: 'DL' },
{ LoanNum: '1-SB', Type: 'SB' },
{ LoanNum: '2-SB', Type: 'SB' },
] );
vm.LoanDetails.push( buildRow(1, vm.ABLoans));
vm.LoanDetails.push( buildRow(2, vm.ABLoans));
ko.applyBindings(vm);
See this jsFiddle for the above code working