Knockout - показать флажок на основе выбора списка выбора в таблице

Я пытаюсь показать/скрыть флажок на основе выбора списка выбора для каждой строки в таблице. Параметры раскрывающегося списка отображаются правильно, но вычисляемая функция не обновляет видимость флажка после изменения значения параметра. Ниже мой код... Можете ли вы, ребята, сказать мне, что я делаю неправильно.

http://jsfiddle.net/euh926a7/10/

<table width="95%" cellspacing="0" >
                <thead>
                    <tr class="freeze">
                        <th> Employee ID </th>
                        <th> Full Name </th>
                        <th> Leap Leader </th>
                    </tr>
                <tbody data-bind='foreach: staffLists'>
                    <tr>
                        <td data-bind="text: employeeId"></td>
                        <td><select data-bind="options: $parent.positionOptions, optionsText: 'text', optionsValue: 'value', value: position, optionsCaption: 'Select one...',optionsAfterRender: $parent.setOptionDisable"></select></td>
                        <td><input type="checkbox" data-bind="checked : leapLeader, visible : showleap" /></td>
                    </tr>
                </tbody>
            </table>

ниже мой js

var scLogic = new Array([]);
scLogic.test1 = [false, false, false, ''];
scLogic.test2 = [true, true, true, 'logic'];

function viewModel(){
var self = this;
self.staffLists = ko.observableArray([]);
for(var i=0; i<2;i++)
        self.staffLists.push(new staffModel(i));
self.positionOptions = new Array(
    { value: 'test1', text: 'Testing 1', disable: false},
    { value: '', text: '--- Test 2 ---', disable: true},
    { value: 'test2', text: 'Testing 2', disable: false}
);
self.setOptionDisable = function(option, item) {
    if (!item) return;
    ko.applyBindingsToNode(option, {
        disable: item.disable
    }, item);
};
}

ko.applyBindings(new viewModel());

function  staffModel(i){
var self = this;
self.recordId = 'rec' + i;
self.employeeId = 'emp' + i;
self.position = ko.observable('test' + i);
self.leapLeader = ko.observable(false);
self.showleap = ko.computed(function() {
    return scLogic[self.position] === undefined ? false : 
scLogic[self.position][0];
});
}

person user2475892    schedule 19.07.2018    source источник
comment
В вашем операторе return в вычисленном: [self.postion] есть опечатка. Я также думаю, что, поскольку это наблюдаемое, вы должны вызвать его: [self.position()] чтобы получить его значение   -  person msokrates    schedule 19.07.2018


Ответы (1)


Спасибо, msokrates!

В вашем операторе return в вычисленном: [self.postion] есть опечатка. Я также думаю, что, поскольку это наблюдаемая величина, вы должны вызвать ее: [self.position()], чтобы получить ее значение — msokrates

person user2475892    schedule 19.07.2018