代码之家  ›  专栏  ›  技术社区  ›  HyeonggeunYun

如何在JavaScript助手中只声明一次变量?

  •  2
  • HyeonggeunYun  · 技术社区  · 7 年前

    我正在用meteor blaze开发web组件。

    Template.Button.helpers({
    btnName: function() {
        var FirstBtn = new ButtonComponents('Name', this.class, '50px', '30px', '#DDDDDD');
        return FirstBtn.buttonName();
    },
    btnClass: function() {
        var FirstBtn = new ButtonComponents('Name', this.class, '50px', '30px', '#DDDDDD');
        return FirstBtn.buttonClass();
    },
    btnStyle: function() {
        var FirstBtn = new ButtonComponents('Name', this.class, '50px', '30px', '#DDDDDD');
        return FirstBtn.buttonStyle();
    }});
    

    FirstBtn 在助手中只有一次。

    第一个BTN 在助手之外,因为 this.class

    我该怎么做?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Styx    7 年前
    var FirstBtn;
    function getFirstBtn(cls) {
        if (FirstBtn == null) {
            FirstBtn = new ButtonComponents('Name', cls, '50px', '30px', '#DDDDDD');
        }
        return FirstBtn;
    }
    
    Template.Button.helpers({
        btnName: function() {
            return getFirstBtn(this.class).buttonName();
        },
        btnClass: function() {
            return getFirstBtn(this.class).buttonClass();
        },
        btnStyle: function() {
            return getFirstBtn(this.class).buttonStyle();
        }
    });
    

    补充: onCreated 并将其存储在模板实例本身中。稍后,您可以从以下帮助器中引用它: Template.instance().FirstBtn.buttonName() 例如

        2
  •  0
  •   Gaëtan Rouziès    7 年前

    您应该将变量放入模板实例中,并使用 .

    Template.Button.onCreated(function(){
        this.FirstBtn = new ButtonComponents('Name', this.data.class, '50px', '30px', '#DDDDDD');
    });
    
    Template.Button.helpers({
    btnName: function() {
        const instance = Template.instance();
    
        return instance.FirstBtn.buttonName();
    },
    btnClass: function() {
        const instance = Template.instance();
    
        return instance.FirstBtn.buttonClass();
    },
    btnStyle: function() {
        const instance = Template.instance();
    
        return instance.FirstBtn.buttonStyle();
    }});
    

    const instance = Template.instance();