Ember.js 当转换到视图时,余烬引发重新渲染错误
我的视图正在初始化Redactor WYSIWYG编辑器。直接进入路线时效果良好,但不能从一条路线返回到这条路线。即从/到/文档/1 这是我得到的错误: 视图: 我在《观点》中也发表了一些评论Ember.js 当转换到视图时,余烬引发重新渲染错误,ember.js,Ember.js,我的视图正在初始化Redactor WYSIWYG编辑器。直接进入路线时效果良好,但不能从一条路线返回到这条路线。即从/到/文档/1 这是我得到的错误: 视图: 我在《观点》中也发表了一些评论 App.RedactorView = Ember.TextArea.extend({ tagName: 'div', init: function() { this._super(); this.on("didInsertElement", this, this._updateEl
App.RedactorView = Ember.TextArea.extend({
tagName: 'div',
init: function() {
this._super();
this.on("didInsertElement", this, this._updateElementValue);
},
_updateElementValue: Ember.observer(function() {
var value = Ember.get(this, 'value'),
$el = this.$();
if ($el && value !== $el.getCode()) {
$el.setCode(value);
}
}, 'value'),
_elementValueDidChange: function() {
Ember.set(this, 'value', this.$().getCode());
},
didInsertElement: function() {
console.log('didInsert');
},
willInsertElement: function() {
// these two lines causes the error when coming from other route, but works fine when accessed directly
var test = this.$().attr('class');
this.$().redactor();
// returns fine when accessed directly, otherwise not available, see explanation above
console.log(this.$().getCode());
}
});
我尝试将代码移动到didInsertElement中,但随后我失去了对以前访问过的Redactor函数的访问权:
didInsertElement: function() {
// will not throw any errors when transitioned from other route
var test = this.$().attr('class');
this.$().redactor();
// Uncaught TypeError: Cannot call method 'getCode' of undefined
console.log(this.$().getCode());
},
有什么想法吗?所以看起来懒惰和扩展Ember.TextArea是个坏主意。我猜它的一个子类把jQuery的工作搞砸了 我改变了我的观点,现在它起作用了
App.RedactorView = Ember.View.extend({
tagName: 'div',
init: function() {
this._super();
this.on("focusOut", this, this._elementValueDidChange);
this.on("change", this, this._elementValueDidChange);
this.on("paste", this, this._elementValueDidChange);
this.on("cut", this, this._elementValueDidChange);
this.on("input", this, this._elementValueDidChange);
},
_updateElementValue: Ember.observer(function() {
var value = Ember.get(this, 'value'),
$el = this.$();
if ($el && value !== $el.getCode()) {
$el.setCode(value);
}
}, 'value'),
_elementValueDidChange: function() {
Ember.set(this, 'value', this.$().getCode());
},
didInsertElement: function() {
this.$().redactor();
this._updateElementValue();
}
});
App.RedactorView = Ember.View.extend({
tagName: 'div',
init: function() {
this._super();
this.on("focusOut", this, this._elementValueDidChange);
this.on("change", this, this._elementValueDidChange);
this.on("paste", this, this._elementValueDidChange);
this.on("cut", this, this._elementValueDidChange);
this.on("input", this, this._elementValueDidChange);
},
_updateElementValue: Ember.observer(function() {
var value = Ember.get(this, 'value'),
$el = this.$();
if ($el && value !== $el.getCode()) {
$el.setCode(value);
}
}, 'value'),
_elementValueDidChange: function() {
Ember.set(this, 'value', this.$().getCode());
},
didInsertElement: function() {
this.$().redactor();
this._updateElementValue();
}
});