KNOCKOUT 给出无法解析 foreach 循环中的绑定属性



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

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

<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"}]这是错误,直接来自Firebug控制台: 错误:无法分析绑定属性。 消息:引用错误:标题未定义; 属性值:值:标题

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

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

self.tasks = ko.observableArray(new Task());

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

正如@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>

最新更新