Javascript knockout无法分析foreach循环中的绑定属性
编辑:回答我自己,错误是因为旧版本的淘汰,始终使用最新版本,并检查现有版本 我一直在遵循淘汰赛教程,并试图自己做一些事情,但得到了错误,即使我基本上有相同的代码Javascript knockout无法分析foreach循环中的绑定属性,javascript,html,knockout.js,Javascript,Html,Knockout.js,编辑:回答我自己,错误是因为旧版本的淘汰,始终使用最新版本,并检查现有版本 我一直在遵循淘汰赛教程,并试图自己做一些事情,但得到了错误,即使我基本上有相同的代码 <ul data-bind="foreach: tasks"> <li> <input data-bind="value: title" /> </li> </ul> <script type="text/javascript"> (
<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>
-
(功能(){
功能任务(数据){
this.title=ko.observable(data.contentName);
}
函数TaskListViewModel(){
//资料
var self=这个;
self.tasks=ko.observearray([]);
//从服务器加载初始状态,将其转换为任务实例,然后填充self.tasks
$.getJSON(“”,
{
languageId:$('#LanguageIdNameValuePairs').val()
},函数(所有数据){
var mappedTasks=$.map(所有数据,函数(项){返回新任务(项)});
自我任务(mappedTasks);
});
}
var test=new TaskListViewModel();
控制台日志(测试);
应用绑定(新的TaskListViewModel());
}())
我调用的服务返回以下结果:
[{“contentId”:“1b07790c”,“contentName”:“test”},{“contentId”:“1b07790c”,“contentName”:“test”},{“contentId”:“1b07790c”,“contentName”:“test”}]
这就是firebug控制台中的错误:
错误:无法分析绑定属性。
消息:ReferenceError:未定义标题;
属性值:value:title正如@Artem在评论中指出的,这在他构建的JSFIDLE中确实有效。我能说的唯一原因是你的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>
-
您不应该得到这样的错误,因为此时任务
数组应该是空的,而knockout不应该生成
标记。确保您正在使用[]
或不使用任何东西初始化任务
数组,而不是使用类似的[“”]
您还可以尝试使用空的任务对象初始化任务:
self.tasks = ko.observableArray(new Task());
我犯的错误是因为我使用的是knockout 1.2.1,到今天为止的最新版本是2.1.0,升级knockout使其工作 您的代码适用于我:。我认为你没有发布的html标记有问题。在哪个绑定中出现错误?我忘记了代码块中的end ul标记,因此它没有包含在内。我已经附上了我收到的错误消息,出于某种原因,它似乎不理解title是一个任务对象,并且它失败了,在ajax请求得到响应之前……我自己刚刚修复了错误,这是由于旧的淘汰版本。。。。自我提示:先检查版本!非常感谢您的时间和帮助!缺少ul是因为我忘记将其包含在代码块中,不幸的是,这不是问题所在。但是它是一个更大系统的一部分,所以故障可能在其他地方。正如你所看到的,错误是由于旧版本的淘汰,所以,我的坏!非常感谢您的时间和帮助!我也这么做了,除了检查版本号,我几乎什么都试过了。。。。非常感谢您的时间和帮助!