简体   繁体   English

如何将事件绑定到ember.js中动态创建的实例

[英]How to bind event to dynamically created instance in ember.js

I have created a custom component which will contain reference to view(bound to a handlebar template). 我创建了一个自定义组件,它将包含对视图的引用(绑定到手柄模板)。 And my template has a button which I want to attach a click handler to it. 我的模板有一个按钮,我想附加一个点击处理程序。

I will create the instance of my component dynamically and attach it to different divs. 我将动态创建组件的实例并将其附加到不同的div。 But my problem is how I can hook the view to the event handler which is defined in corresponding component instance. 但我的问题是如何将视图挂钩到相应组件实例中定义的事件处理程序。

    App.ImageView = Ember.View.extend({
        "templateName" : "image-template",
        "imagePath" : null,
        "controller" : null
    });

    App.ImageSwitcher = Ember.Object.extend({
        renderTo : null,
        init: function(){
            this.set("view",App.ImageView.create());
        }
        renderOnScreen: function(){
            this.get("view").appendTo(renderTo);
        }
        clickHandler : function(evt){
        }
    })

<script type="text/x-handlebars" data-template-name="image-template">
    <img {{bindAttr src="imagePath"}} />
    <input type="button" value="Change image" />
</script>

Component instance creation: 组件实例创建:

var component = App.ImageSwitcher.create({renderTo:"#div"});
component.renderOnScreen()


var component1 = App.ImageSwitcher.create({renderTo:"#div1"});
component1.renderOnScreen()

Now I want the buttons to invoke the clickHandler defined in corresponding App.ImageSwitcher instance. 现在我希望按钮调用相应的App.ImageSwitcher实例中定义的clickHandler。 Is there any way to it. 有什么办法吗? I tried to have a reference to the App.ImageSwitcher instance within the view. 我试图在视图中引用App.ImageSwitcher实例。 But it is not a clean way of doing it. 但这并不是一种干净的方式。

You can mixin Ember.TargetActionSupport into your view, and then have a click handler on that, as such: 您可以将Ember.TargetActionSupport混合到您的视图中,然后在其上有一个单击处理程序,如下所示:

App.ImageView = Ember.View.extend(Ember.TargetActionSupport, {
    templateName: "image-template",
    action: "clickHandler",
    imagePath: null,
    controller: null,
    click: function() {
         this.triggerAction();
    }
});

App.ImageSwitcher = Ember.Object.extend({
    renderTo : null,
    init: function(){
        this.set("view",App.ImageView.create({target: this));
    }
    renderOnScreen: function(){
        this.get("view").appendTo(renderTo);
    }
    clickHandler : function(evt){
    }
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM