我有一个contentEditable视图,当我focusOut我得到输入的HTML并保存它.
但是当我从contenteditable中删除所有文本然后集中注意力我得到了错误
Uncaught Error: Cannot perform operations on a Metamorph that is not in the DOM.
请看这个jsfiddle并删除value1文本并集中注意力.
http://jsfiddle.net/rmossuk/Q2kAe/8/
有人能帮忙吗 ?
最好的祝福
干草堆
最佳答案
您的EditableView设置与其content.value绑定的显示:
原文链接:https://www.f2er.com/js/429672.html
Ember通过使用标记脚本标记包装相关部分来执行其绑定更新魔术.看看生成的DOM:
现在,您可以对视图进行编辑.一旦用户完全删除视图的内容,您将注意到周围的脚本标记也被删除(通过浏览器).目前Ember试图更新显示器,它将找不到必要的脚本标签,从而抱怨.
我不认为你可以使这种方法在可信的情况下可靠地工作,因为你将无法控制浏览器使Ember周围环境保持完整.我想您需要自己处理视图更新:删除绑定,创建content.value观察者并显式更新DOM:
App.EditableView = Em.View.extend({
contenteditable: "true",attributeBindings: ["contenteditable"],_observeContent: (function() {
this._displayContent();
}).observes('content.value'),didInsertElement: function() {
this._displayContent();
},_displayContent: function() {
this.$().html(this.get('content.value'));
},...
这是一个JSFiddle,演示了这个解决方案:http://jsfiddle.net/green/BEtzb/2/.
(你当然也可以使用Ember.TextField,它使用常规输入字段并提供所有绑定魔法,如果这就是你所需要的.)