1

我正在学习如何为 Discourse 构建插件。从渲染的角度来看,我的插件运行良好,但缓冲区创建的按钮似乎没有解决被覆盖的车把模板中按钮的操作。

我注册的 JavaScript 资产 -

(function() {
"use strict";

Discourse.AssetValuationComponent = Ember.Component.extend({
    // Id of the element for tracking
    elementId: '1234',
    // Classes to apply to the element
    // classNames: ['asset-valuation-box'],

    actions: { 
        alerttitle: function (topic) {
            console.log(this);
            console.log(topic);
        }
    },

    render: function(buffer) {
        var topic = this.get('topic');
        buffer.push("<div class='asset-valuation-box'>");           
        buffer.push("<button {{action 'alerttitle' topic }}>Click me!</button>");
        buffer.push("</div>");
    }
});
})();

我的车把模板 -

{{asset-valuation user=currentUser asset=model}}

它正在渲染按钮,但单击按钮不会触发 alerttitle 操作 - 我想知道是否是因为使用渲染是在 Ember 遍历 DOM 之后使用的。有什么想法吗?

4

1 回答 1

1

render 只是将字符串注入到 dom 中。您最好使用templateNameortemplate参数定义模板,如下所示:

App.AssetValuationComponent = Ember.Component.extend({
    // Id of the element for tracking
    elementId: '1234',
    template :Ember.Handlebars.compile("<div class='asset-valuation-box'><button {{action 'alerttitle' topic }}>Click me!</button></div>"),
    // Classes to apply to the element
    // classNames: ['asset-valuation-box'],

    actions: { 
        alerttitle: function (topic) {
            console.log(this);
            console.log(topic);
        }
    }
});

http://emberjs.jsbin.com/mivif/1/edit

于 2014-03-11T04:50:26.617 回答