Значение по умолчанию KnockoutJS не устанавливается, когда getJSON - PullRequest
0 голосов
/ 06 октября 2018

Я перехожу с AngularJS на KnockoutJS.С наименьшей частью у меня есть проблема, которую я потратил уже два дня.

<div class="form-group">
    <label for="account">Konto:</label>
    <select class="form-control" data-bind="options: accounts, value: account</select>
</div>

Это учетная запись:

self.account = ko.observable('Bargeldkonto');

Это прекрасно работает, когда я определю это, я понял позже.В моем случае выбран второй вариант:

self.accountstest = ko.observable([]);    
self.accountstest = ko.observable(['Avadis','Bargeldkonto','Bitcoin','Lohnkonto','Mietkaution','Sparen 3','Sparen 3 Kto. 2','Sparkonto Liam Noa','Sparkonto SQ','Trading SQ']);

Но в этом случае он не работает.Всегда сначала выбирается:

        self.accounts = ko.observableArray([]);
        $.getJSON("entry_account_mysql.php", function(data) {
            self.accounts(data);
            //alert(JSON.stringify(data));
            console.log("accounts: " + self.accounts());
        });

Я знаю, что это связано с таймингом, но не знаю, как вести себя с ним в KnockoutJS.Некоторые говорят, что $ getJson это не хорошо.Забавно, $ .ajax работает, но теперь я получаю эту ошибку в консоли: «Синхронный запрос XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для работы конечного пользователя.»:

        self.accounts = ko.observableArray([]);
        $.ajax({
            url: "entry_account_mysql.php",
            async: false,
            success: function(data) {
                self.accounts(data);
            }
        });

Назад к $.getJSON?Но как?

1 Ответ

0 голосов
/ 06 октября 2018

Оберните ваш выбор в привязке виртуального элемента if:

<!-- ko if: accounts.length -->
  <select class="form-control" data-bind="options: accounts, value: account"></select>
<--! /ko -->

Это гарантирует, что элемент будет обработан только в том случае, если accounts содержит какие-либо элементы, и этим должен решить ваши проблемы с синхронизацией.

...