我从knockoutjs得到以下错误。它清楚地知道什么是AreaNames,因为UI显示AreaNames正在显示,但在某些时候javascript冻结了错误。
Uncaught Error: Unable to parse bindings.
Message: TypeError: Object #<Object> has no method 'AreaNames';
Bindings value: foreach: ActiveDay().AreaNames()
相关代码:
<ul data-bind="foreach: ActiveDay().AreaNames()">
<li data-bind="text: $data"></li>
</ul>
var scheduleModel = function (shiftCellToggle) {
var vm = this;
vm.ActiveDay = ko.observable({ AvailableShiftCategories: [] });
vm.CustomMapping = {
'Weeks': {
create: function (options) {
var week = new scheduleWeekModel(vm, shiftCellToggle);
ko.mapping.fromJS(options.data, week.CustomMapping, week);
return week;
}
}
};
}
var scheduleWeekModel = function (scheduleModel, shiftCellToggle) {
var vm = this;
vm.CustomMapping = {
'Days': {
create: function (options) {
var day = new scheduleDayModel(scheduleModel, shiftCellToggle);
ko.mapping.fromJS(options.data, day.CustomMapping, day);
return day;
}
}
};
var scheduleDayModel = function (scheduleModel, shiftCellToggle) {
var vm = this;
vm.CustomMapping = {
'AvailableShiftCategories': {
create: function (options) {
var availableShiftCategory = new availableShiftCategoryModel(scheduleModel, vm, shiftCellToggle);
ko.mapping.fromJS(options.data, availableShiftCategory.CustomMapping, availableShiftCategory);
return availableShiftCategory;
}
}
};
vm.AreaNames = ko.observableArray([]);
var viewModel = new scheduleModel(createShiftToggle());
ko.applyBindings(viewModel);
答案 0 :(得分:1)
我发现这个一般性问题的最佳解决方案是GC:https://groups.google.com/d/msg/knockoutjs/oTVkPnNxF84/mK1FIrAaOqoJ
在HTML中将ko对象输出为JSON字符串。它是原始的,也是了解正在发生的事情的有效工具。在我的情况下,我发现在特定的dom元素启用后,后期绑定是消除我对同一类型错误的特定问题的关键。请试用GC小组中描述的解决方案。
答案 1 :(得分:0)
您的代码显示AreaNames
位于名为vm的对象上。但是你的绑定意味着AreaNames
是对象ActiveDay
的一部分。从您提供的代码中没有意义。我们需要查看更多代码。
什么是vm,它是如何绑定的?这是传递给applyBindings
的对象吗?
我的第一个想法是假设ActiveDay
是你的根VM上的一个属性,它在某个时候是未分配的,它会以你描述的方式破坏绑定。
希望这有帮助。