0

编辑:回答我自己,错误是因为旧版本的淘汰赛,总是使用最新版本,并检查现有的!

我一直在关注淘汰赛教程,并尝试自己做一些事情,但得到了错误,即使我基本上有相同的代码。

<ul data-bind="foreach: tasks">
<li>
    <input data-bind="value: title" />
</li>
</ul>

   <script type="text/javascript">
        (function () {
            function Task(data) {
                this.title = ko.observable(data.contentName);
            }

            function TaskListViewModel() {
                // Data
                var self = this;
                self.tasks = ko.observableArray([]);

                // Load initial state from server, convert it to Task instances, then populate self.tasks
                $.getJSON('<%= Url.Action("GetContentList", "TranslateContentMenu") %>',
                    {
                        languageId: $('#LanguageIdNameValuePairs').val()
                    },  function (allData) {
                    var mappedTasks = $.map(allData, function (item) { return new Task(item) });
                    self.tasks(mappedTasks);
                });
            }

            var test = new TaskListViewModel();
            console.log(test);
            ko.applyBindings(new TaskListViewModel());
        }())
</script>

我正在调用的服务返回此结果: [{"contentId":"1b07790c","contentName":"test"},{"contentId":"1b07790c","contentName":"test"},{"contentId ":"1b07790c","contentName":"test"}]

这是错误,直接从萤火虫控制台出来:错误:无法解析绑定属性。消息:ReferenceError:标题未定义;属性值:值:title

4

3 回答 3

1

你不应该得到这样的错误,因为此时tasks数组应该是空的,并且敲除不应该生成<li>标签。确保您使用或不使用类似这样的东西来初始化tasks数组。[]nothing[""]

您也可以尝试使用空Task对象初始化任务:

self.tasks = ko.observableArray(new Task());
于 2012-10-24T13:01:52.910 回答
1

我得到的错误是因为我使用的是淘汰赛 1.2.1,截至今天的最新版本是 2.1.0,升级淘汰赛使其工作。

于 2012-10-24T13:04:49.313 回答
0

正如@Artem 在评论中指出的那样,这在他构建的 jsFiddle 中确实有效。我唯一能把它归结为你的 HTML 格式错误。你写了:

<ul data-bind="foreach: tasks">
<li>
    <input data-bind="value: title" />
</li>

Knockout 不喜欢格式不正确的 HTML。你应该试试:

<ul data-bind="foreach: tasks">
<li>
    <input data-bind="value: title" />
</li>
</ul>
于 2012-10-24T11:43:46.723 回答