首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ember valueBinding to Redactor WYSIWYG

Ember valueBinding to Redactor WYSIWYG
EN

Stack Overflow用户
提问于 2013-02-04 21:33:48
回答 3查看 976关注 0票数 6

我使用的是Redactor WYSIWYG编辑器,它允许你在初始化代码之前使用最少的标记:

代码语言:javascript
复制
<textarea id="redactor" name="content">
…
</textarea>

但是,在初始化期间,Redactor将使用以下内容包装此textarea

代码语言:javascript
复制
<div class="redactor_box">
  <div class="redactor_ redactor_editor" contenteditable="true" dir="ltr">
    …
  </div>
  <textarea id="redactor" name="content" style="display: none;">
    …
  </textarea>
</div>

我目前已经在Ember中做到了这一点

模板:

代码语言:javascript
复制
{{ view App.RedactorView valueBinding='contentAttributes.headerContent' class='header-redactor' name='headerContent' }}

查看扩展Ember.TextArea:

代码语言:javascript
复制
App.RedactorView = Ember.TextArea.extend({
  didInsertElement: function() {
    $("#"+this.elementId).redactor();
  }
});

这里仍然有一个到textarea的绑定(现在是隐藏的),但是我现在需要绑定redactor_editor类。我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-04 23:49:54

在深入研究Redactor代码后,我发现如果您的编辑器元素不是textarea元素,则Redactor会做相反的事情,例如,如果您使用的是textarea,则会添加div

更新了我的视图,并根据来自Ember.TextArea和Ember.TextSupport的代码进行了调整,以便获得正确的值,如果您也使用支持contenteditable的元素,这可能会很好地工作。

代码语言:javascript
复制
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 $el, value;
    value = Ember.get(this, "value");
    $el = this.$().context;
    if ($el && value !== $el.innerHTML) {
      return $el.innerHTML = value;
    }
  }, "value"),
  _elementValueDidChange: function() {
    var $el;
    $el = this.$().context;
    return Ember.set(this, "value", $el.innerHTML);
  },
  didInsertElement: function() {
    this.$().redactor();
    this._updateElementValue();
  }
});

下面是一个演示它的JSBin:http://emberjs.jsbin.com/cefebepa/1/edit

票数 7
EN

Stack Overflow用户

发布于 2014-05-11 07:03:23

我使用的是Ember + Foundation,kroofy的解决方案对我来说很有吸引力。

contentEditable的高度是在没有填充的情况下加载的(缺少一个段落),所以我更改为redactor的insertHtml方法来更新值。

发自:

代码语言:javascript
复制
return $el.innerHTML = value;

至:

代码语言:javascript
复制
return this.$().redactor('insertHtml', value);

谢谢你,克莱夫。

票数 3
EN

Stack Overflow用户

发布于 2013-02-04 23:01:07

首先,当您想要访问Ember View的DOM元素时,您应该使用以下代码:

代码语言:javascript
复制
this.$()

而不是

代码语言:javascript
复制
$("#"+this.elementId)

关于Redactor的问题。我不确定将Ember代码与WYSIWYG编辑器的功能捆绑在一起是否明智,但如果你下定决心,你可以这样做:

代码语言:javascript
复制
App.RedactorView = Ember.TextArea.extend({
  didInsertElement: function() {
    var box = this.$().closest('.' + this.elementId + '_box');
    box.find('.' + this.elementId + '_redactor_editor').redactor();
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14687880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档