1

ノックアウトjsから以下のエラーが発生しています。ほとんどの場合、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);
4

2 に答える 2

1

この一般的な問題に対して私が見つけた最善の解決策は、GC にあります: https://groups.google.com/d/msg/knockoutjs/oTVkPnNxF84/mK1FIrAaOqoJ

ko オブジェクトを HTML 内の JSON 文字列として出力します。それは大雑把ですが、何が起こっているのかを知るための効果的なツールです。私の場合、特定の dom 要素が有効になった後の遅延バインディングが、この同じタイプのエラーに関する特定の問題を解決するための鍵であることがわかりました。GCグループに記載されている解決策を試してみてください。

于 2012-09-28T06:31:57.337 に答える
0

あなたのコードはAreaNames、vm というオブジェクト上にあることを示しています。しかし、バインディングはそれAreaNamesが object の一部であることを意味しますActiveDay。これは、提供したコードからは意味がありません。もっとコードを見る必要があるかもしれません。

vm とは何ですか? また、どのようにバインドされますか? これは に渡されるオブジェクトapplyBindingsですか?

私の最初の考えは、ルートVMのプロパティであると仮定ActiveDayすると、ある時点で割り当てられていないため、説明した方法でバインディングが壊れるということです。

お役に立てれば。

于 2012-04-17T21:51:40.380 に答える