I start with this:
我从这开始:
<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" ...
Then I pull a flat JSON object from the server and bind each property found to matching elements in the DOM:
然后我从服务器中提取一个扁平的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] );
}
});
It results in an error:
它会导致错误:
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未捕获错误:NO_MODIFICATION_ALLOWED_ERR:DOM异常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
I don't see it binding any items that it shouldn't. Also, there are no declarative knockout bindings in the html. What am I doing wrong?
我不认为它绑定任何它不应该的项目。此外,html中没有声明性的敲除绑定。我究竟做错了什么?
3 个解决方案
#1
119
OMG. The answer was to use the right binding attribute. Instead of text
, it was value
for an input!
我的天啊。答案是使用正确的绑定属性。它不是文本,而是输入的价值!
#2
1
In my case, the problem was that I data-bind to text instead of value.
就我而言,问题是我数据绑定到文本而不是值。
bad: <input type="text" data-bind="text:id" maxlength="3" style="width:100%;" />
bad:
good: <input type="text" data-bind="value:id" maxlength="3" style="width:100%;" />
good:
#3
0
I also saw this error in Chrome when I was accidentally calling ko.applyBindings(viewModel)
multiple times.
当我不小心多次调用ko.applyBindings(viewModel)时,我也在Chrome中看到了这个错误。
#1
119
OMG. The answer was to use the right binding attribute. Instead of text
, it was value
for an input!
我的天啊。答案是使用正确的绑定属性。它不是文本,而是输入的价值!
#2
1
In my case, the problem was that I data-bind to text instead of value.
就我而言,问题是我数据绑定到文本而不是值。
bad: <input type="text" data-bind="text:id" maxlength="3" style="width:100%;" />
bad:
good: <input type="text" data-bind="value:id" maxlength="3" style="width:100%;" />
good:
#3
0
I also saw this error in Chrome when I was accidentally calling ko.applyBindings(viewModel)
multiple times.
当我不小心多次调用ko.applyBindings(viewModel)时,我也在Chrome中看到了这个错误。