【问题标题】:Ember.js - Updating a Bound Property without Triggering Local ObserverEmber.js - 在不触发本地观察者的情况下更新绑定属性
【发布时间】:2014-07-28 08:10:36
【问题描述】:

我创建了一个包含编辑器 (CKEditor) 的 ember 组件。编辑器的值通过 setData() 和 getData() 访问器更新。我想在我的 ember 控件中实现双向绑定,以便对组件的“内容”字段的编辑流入和流出控件。

到目前为止,我可以很容易地让它以一种方式进行 - 但我尝试双向进行的尝试非常混乱。我可以在属性上设置一个观察者并让它更新控件。但是,当我在调用控制器的“更改”事件时尝试设置属性时,会导致观察者被触发。这反过来会导致编辑器“更改”事件触发等等。欢迎来到循环之地。

我知道有办法解决这个问题 - 但我一直在尝试的所有事情都让我做不到。它看起来很老套——不像 Ember 的其他部分那样优雅。任何人都可以提出一些示例来演示此首选模式吗?

谢谢!

--

(感谢大卫 - 这是一些附加信息)

我一直在尝试绑定属性。它适用于出站更新(从编辑器控件到页面上的另一个绑定文本区域),但是当入站页面开始停滞时。

当我初始化 CKEditor 时,我引用了我安装的一个添加“更改”事件的组件:

editor.on('change', this.updateContent.bind(this));

这里是更新内容事件:

updateContent: function() {
    this.set('_content', this.get('editor').getData());
},

然后,绑定属性:

content: function(key, val, previous)
{
    if (arguments.length > 1)
    {
        this.set('_content', val);
        var editor = this.get('editor');
        if (editor) editor.setData(val);
    }
    return this.get('_content');
}.property('_content'),

【问题讨论】:

    标签: javascript ember.js binding observers


    【解决方案1】:

    听起来您正试图从您的控件更新计算属性。如果你有一个 fullName 的计算属性,它依赖于 firstName 和 lastName,那么如果你的 UI 更新依赖关系而不是计算属性,它就会变得混乱。

    但是,如果您确实需要更新计算结果,请查看 Ember 文档 (http://emberjs.com/guides/object-model/computed-properties/) 中的“设置计算属性”部分,它向您展示了如何使用计算属性的输入来更新其依赖关系。

    不确定这是否满足您的要求,但如果不是,请提交一份关于循环内容和需要更新的内容的 sn-p。

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 1970-01-01
      • 2016-02-11
      • 2017-03-13
      • 1970-01-01
      • 2015-05-26
      • 2016-09-21
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多