观察/检测Ember组件中的变化{{yield}}阻止

时间:2015-04-02 13:28:06

标签: ember.js jquery-isotope

组件是否有任何方式可以听取或观察所产生内容的变化?

我有一个组件作为isotope.js包装器,并且希望能够调用一些必要的清理同位素方法(例如.isotope('layout'))以防包装内容发生变化(例如通过过滤)。

通过观察控制器属性,我已经能够使用View做类似的事情,但是如果可能的话,我希望保持较少的耦合。

1 个答案:

答案 0 :(得分:0)

嗯,我不确切地知道你想要做什么,也没有使用isotope.js。但是我可以告诉你。 {{yield}}助手调用此函数:

_yield: function(context, options, morph, blockArguments) {
        var view = options.data.view;
        var parentView = this._parentView;
        var template = get(this, 'template');

        if (template) {
            Ember.assert("A Component must have a parent view in order to yield.", parentView);

            view.appendChild(Ember.View, {
                isVirtual: true,
                tagName: '',
                template: template,
                _blockArguments: blockArguments,
                _contextView: parentView,
                _morph: morph,
                context: get(parentView, 'context'),
                controller: get(parentView, 'controller')
                //expose parent to children components?
            });
        }
}

理论上,您可以向子组件公开句柄以设置父组件的属性。这显然是两个组成部分的结合。您还可以让孩子和父母同时采取包装内容"作为属性,以便您可以在两个地方观察和操纵。我用这两种方法取得了巨大的成功。我使用的是由上下文决定的