getJSON时未设置KnockoutJS默认值

时间:2018-10-06 08:32:56

标签: ajax knockout.js getjson

我从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 :(得分:1)

将选择内容包装在虚拟元素绑定if中:

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

这可确保仅当accounts包含任何元素时才呈现该元素,从而应解决您的计时问题。