编辑:回答我自己,错误是因为旧版本的 knockout ,始终使用最新版本,并检查现有版本!
我一直在关注 knockout 教程,并尝试自己做一些事情,但即使我基本上有相同的代码,也会出现错误。
<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": “测试”}]
这是直接从 Firebug 控制台输出的错误: 错误:无法解析绑定(bind)属性。 消息:ReferenceError:标题未定义; 属性值: 值:标题
最佳答案
你不应该得到这样的错误,因为此时 tasks
数组应该为空,并且 knockout 不应生成 <li>
标签。确保您正在初始化 tasks
数组 []
或与 nothing
不是这样的[""]
。
您也可以尝试使用空 Task
来初始化任务对象:
self.tasks = ko.observableArray(new Task());
关于javascript - knockout 导致无法解析 foreach 循环中的绑定(bind)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047473/