Получение неперехваченной ошибки "no MODIFICATION ALLOWED ERR" для входной привязки


Я начинаю с этого:

<script src="/Scripts/jquery-1.6.2.min.js" ...
<script src="/Scripts/knockout-1.2.1.debug.js" ...
<script src="/Scripts/knockout.mapping-latest.js" ...
<script src="/Scripts/jquery.unobtrusive-knockout.min.js" ...

затем я вытаскиваю плоский объект JSON с сервера и привязываю каждое найденное свойство к соответствующим элементам в DOM:

$.ajax({
    url: '/GetRecord',
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(requestObject),
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        // Clear the current view model
        VM.Items.length = 0;

        // only one item coming from server
        VM.Items[0] = ko.mapping.fromJS(data.BlankItem);

        // for each property found, bind it to the matching DOM element
        $.each(VM.Items[0], function (indexInArray, valueOfElement) {
            var attrName = indexInArray;

            // skip over things not an accessor (get/set property function)
            if( typeof valueOfElement == "function")
            {
                var attrValue = valueOfElement();

                // if it's a checkbox, bind the checked attribute
                var a = $('input[name="' + attrName + '"][type="checkbox"]');
                if (a.length)
                    a.dataBind({ checked: attrName });

                // if it's a radio, bind all the found radio checked attributes
                var b = $('input[name^="' + attrName + '"][type="radio"]');
                if (b.length)
                    b.dataBind({ checked: attrName });

                // if it's a text, bind the text attribute
                var c = $('input[name="' + attrName + '"][type="text"]');
                if (c.length)
                    c.dataBind({ text: attrName });  // <--- Error (use value)
            }
        });

        // Then set knockout loose
        ko.applyBindings( VM.Items[0] );
    }
});

это приводит к ошибке:

Неперехваченная ошибка: NO_MODIFICATION_ALLOWED_ERR: исключение DOM 7
нокаут.биндингхандлеры.updateknockout-1.2.1.отлаживать.js: 1577
invokeBindingHandlerknockout-1.2.1.отлаживать.js: 1231
нокаут.applyBindingsToNode.нокаут.иждивенец наблюдаем.
disposeWhenNodeIsRemovedknockout-1.2.1.отлаживать.js: 1268
evaluateknockout-1.2.1.отлаживать.js: 927
нокаут.dependentObservableknockout-1.2.1.отлаживать.js: 965
нокаут.applyBindingsToNodeknockout-1.2.1.отлаживать.js: 1252
нокаут.applyBindingsknockout-1.2.1.отлаживать.js: 1284
нокаут.utils.arrayForEachknockout-1.2.1.отлаживать.js: 48
нокаут.applyBindingsknockout-1.2.1.отлаживать.js: 1283
$.Аякс.successPropertyForm: 266
f.расширьте._Отложенный.е.resolveWithjquery-1.6.2.минута.js: 16
wjquery-1.6.2.минута.js: 18
Ф.поддержка.Аякс.Ф.ajaxTransport.отправить.d

Я не вижу привязки любые предметы, которые он не должен. Кроме того, нет никаких декларативной привязки нокаутом в HTML. Что я делаю не так?

3 56

3 ответа:

OMG. Ответ состоял в том, чтобы использовать правильный атрибут привязки. Вместо text, Это было value для входа!

в моем случае проблема заключалась в том, что я привязываю данные к тексту вместо значения.

плохо:

хорошо:

Я также видел эту ошибку в Chrome, когда я случайно позвонил ko.applyBindings(viewModel) несколько раз.