knockout.js 敲除级联数据绑定不起作用

j5fpnvbx  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(170)

我有两个下拉菜单。我想在选择第一个下拉菜单时加载第二个下拉菜单。第一个下拉菜单加载正常,但第二个下拉菜单没有加载。没有控制台错误。
HTML语言

<select data-bind="
 options: $root.availableTutorials,
 value: $root.selectedTutorial,
 optionsCaption: 'Choose tutuorial...',
 event:{ change: $parent.onFirstChange }">
</select>

<select data-bind="
 options: $root.availableTutorials2,
 value: $root.selectedTutorial2,
 optionsCaption: 'Choose tutuorial2...'">
</select>

JS系统

viewModel.selectedTutorial = ko.observable();
        viewModel.selectedTutorial2 = ko.observable();

        viewModel.availableTutorials = ko.observableArray([
            'Academic', 'Big Data',
            'Databases', 'Java Technologies',
            'Mainframe', 'Management',
            'Microsoft Technologies', 'Mobile Development',
            'Programming', 'Software Quality'
        ]);

        viewModel.onFirstChange = function () {

            alert('first changed');

            viewModel.availableTutorials2 = ko.observableArray([
                'Academic', 'Big Data',
                'Databases', 'Java Technologies',
                'Mainframe', 'Management',
                'Microsoft Technologies', 'Mobile Development',
                'Programming', 'Software Quality'
            ]);

        }

在选择第一个下拉菜单时,它会显示“首次更改”的警报,但不会绑定数据。如有任何帮助,将不胜感激。

kzmpq1sx

kzmpq1sx1#

为了使knockout能够更新期权,它需要从一开始就有一个可观察的数组(在ko.applyBindings时)。要更新期权,你可以通过调用它(myObsArray([])而不是myObsArray = [])写入该可观察的数组。
第一个
我还建议不要使用change事件,而是使用subscribecomputed,它们使用selectedTutorial作为触发器来加载第二个下拉列表的值。

相关问题