2011-07-13 4 views
56

結合入力するための不明なエラー「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" ... 

そしてIはサーバからフラット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]); 
    } 
}); 

それはエラーになります:

Uncaught Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7
ko.bindingHandlers.updateknockout-1.2.1.debug.js:1577
invokeBindingHandlerknockout-1.2.1.debug.js:1231
ko.applyBindingsToNode.ko.dependentObservable.
disposeWhenNodeIsRemovedknockout-1.2.1.debug.js:1268
evaluateknockout-1.2.1.debug.js:927
ko.dependentObservableknockout-1.2.1.debug.js:965
ko.applyBindingsToNodeknockout-1.2.1.debug.js:1252
ko.applyBindingsknockout-1.2.1.debug.js:1284
ko.utils.arrayForEachknockout-1.2.1.debug.js:48
ko.applyBindingsknockout-1.2.1.debug.js:1283
$.ajax.successPropertyForm:266
f.extend._Deferred.e.resolveWithjquery-1.6.2.min.js:16
wjquery-1.6.2.min.js:18
f.support.ajax.f.ajaxTransport.send.d

私はそれはそれすべての項目を結合表示されませんすべきではない。また、htmlに宣言的なノックアウトバインディングはありません。私は間違って何をしていますか?

答えて

119

OMG。答えは、正しいバインディング属性を使用することでした。 textの代わりに、入力のためにvalueでした!

+1

これはかなり一般的なようです。ありがとう! –

+0

私はちょうど追加したい、私はクロームでこのエラーを見たが、IE 9ではエラーがスローされません。私はIE9を使ってテスト/デバッグしていましたが、すべてが機能していることに気づいていましたが、入力フィールドの値を編集したときに基礎となるデータは更新されませんでした。もちろん、値にではなくテキストにバインドされていると、正しく更新されます。 – ethermal

+0

ちょうど私もthnxを救った! – TimothyP

0

私は誤ってko.applyBindings(viewModel)に複数回電話したときにこのエラーをChromeで見ました。

1

私の場合、問題は値の代わりにテキストにデータをバインドすることでした。

不良:<入力タイプ= "text"データバインド= "テキスト:id" maxlength = "3" style = "width:100%;"/>

good:< input type = "text" data-bind = "value:id" maxlength = "3" style = "width:100%;"/>

関連する問題