js - knockout无法处理绑定“text:function(){return

时间:2017-08-14 23:07:06

标签: javascript knockout.js

无法找到我犯错的地方。 我运行代码时收到此错误消息:

(+ i sum) => 1
(+ i sum) => 3
(+ i sum) => 6
(+ i sum) => 10
(+ i sum) => 15

(sum-to 5) => 15

newQuote可能会为quotesArray添加新位置,并导致添加新行。当newQuote没有ajax请求时,它工作正常,因此添加所有相同的对象。阿贾克斯自己也是这样。不知道该怎么办。 我的HTML:

Uncaught ReferenceError: Unable to process binding "text: function (){return quoteAuthor }"
Message: quoteAuthor is not defined

我的JS:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title></title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    </head>
    <body>
        <h2>Your quotes</h2>

        <table>
            <thead>
                <tr>
                    <th>Автор</th>
                    <th>Цитата</th>
                    <th>Ссылка</th>
                </tr>
            </thead>
            <tbody data-bind="foreach: quotesArray">
                <tr>
                    <td data-bind="text: quoteAuthor">toDo</td>
                    <td data-bind="text: quoteText">toDo</td>
                    <td data-bind="text: quoteLink">toDo</td>
                </tr>
            </tbody>
        </table>
        <button data-bind="click: addQuote">Add quote</button>
        <script type="text/javascript" src="koQuotesScript.js"></script>
    </body>
</html>

1 个答案:

答案 0 :(得分:2)

你有一个计时问题,因为你的ajax调用是异步的。当您第一次调用newQuote()时,会立即将新对象添加到数组中,但该对象缺少quoteAuthor属性。它缺少任何属性,直到你的ajax调用返回,然后定义那些属性,但同时淘汰不知道要绑定什么。

您可以为这三个属性指定引用对象的默认值,也可以重构代码,以便在ajax调用返回之前不会将对象添加到数组中。