编辑:回答自己,错误是因为旧版本的淘汰赛,总是使用最新版本,并检查现有!
我一直在关注淘汰教程,并尝试自己做一些事情,但是得到错误,即使我基本上有相同的代码。
<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>
我正在调用的服务返回此结果: [{ “内容识别”: “1b07790c”, “内容名”: “测试”},{ “内容识别”: “1b07790c”, “内容名”: “测试”},{ “内容识别”: “1b07790c”, “内容名”: “测试”}]
这是错误,直接来自firebug控制台: 错误:无法解析绑定属性。 消息:ReferenceError:未定义标题; 属性值:value:title
答案 0 :(得分:1)
你不应该得到这样的错误,因为此时tasks
数组应该为空,而淘汰赛不应该生成<li>
标记。确保您使用tasks
或[]
初始化nothing
数组,而不是[""]
。
此外,您可以尝试使用空Task
对象初始化任务:
self.tasks = ko.observableArray(new Task());
答案 1 :(得分:1)
我得到的错误是因为我使用的是淘汰赛1.2.1,截至今天的最新版本是2.1.0,升级淘汰赛让它发挥作用。
答案 2 :(得分: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>