knockoutjs无法解析绑定

时间:2012-04-17 21:43:56

标签: knockout.js

我从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);

2 个答案:

答案 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上的一个属性,它在某个时候是未分配的,它会以你描述的方式破坏绑定。

希望这有帮助。