【问题标题】:KnockoutJS default value not set when getJSONgetJSON 时未设置 KnockoutJS 默认值
【发布时间】:2018-10-06 17:07:15
【问题描述】:

我从 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?但是怎么做呢?

【问题讨论】:

  • 您的&lt;select data-bind="options: accounts, value: account&gt; 中缺少右引号字符和右括号。
  • 抱歉,我现在看到了。但这是一个复制粘贴错误。我有一个右括号。

标签: ajax knockout.js getjson


【解决方案1】:

将您的选择包装在一个虚拟元素绑定if

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

这确保了元素只有在 accounts 包含任何元素时才会被渲染,这样可以解决你的时间问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 2015-10-12
    • 1970-01-01
    • 2017-07-17
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多