小编Boy*_*oyo的帖子

如何在大项目的闭包模板中继承而不继承?

我们使用闭包库和闭包编译器,我们想要使用闭包模板.

但是闭包模板没有继承.这对我们来说真的是一个问题.

据我所知,闭包模板没有继承的原因是因为模板必须简单,易于阅读.

但是你怎么能在没有大项目继承的情况下生活?

例如,我们有一个模板文件button.soy与公共模板生成按钮project.createButton和专用模板:project.createOpenTag_,project.createCSSClasses_,project.createAttributes_,project.createContent_,project.createCloseTag_.

我们有JavaScript类project.Button,我们project.ButtonCircle(可能这个单独的类project.ButtonCircle似乎没有必要,但它只是一个例子)扩展project.Button.

project.ButtonCircle需要对project.createButton模板进行少量更改.

当然我们可以添加新的功能project.createButton,但这是一个非常糟糕的主意,因为这种方法将来会创建怪物模板.

或者我们可以project.createCircleButton在文件button-circle.soy中创建公共模板,从中调用所有私有模板project.createButton,当我们需要"覆盖"其中一个私有模板时(例如project.createCSSClasses_),我们只需在按钮中创建新的私有模板- circle.soy的名字project.createCSSClassesCirbleButton_.

但在这种情况下,我们需要将所有内容复制粘贴project.createButtonproject.createCircleButton.这太可怕了.

我们也尝试使用委托模板,但它不适合继承.

解决这个问题的方法是什么?

javascript inheritance templates google-closure-templates soy-templates

10
推荐指数
1
解决办法
365
查看次数

如何在回调中调用对象的键?

我怎样才能在obj的处理函数中得到变量?如果没有参考OBJMyClass的.

    var obj = {
        func: function(){
            var myClass = new MyClass();
            myClass.handler = this.handler;
            myClass.play();        
        },

        handler: function(){
            //Here i don't have access to obj
            console.log(this); //MyClass
            console.log(this.variable); //undefined
        },

        variable:true
    };

    function MyClass(){
        this.play = function(){
            this.handler();
        };

        this.handler = function(){};
    };

    obj.func();
Run Code Online (Sandbox Code Playgroud)

如果您使用Base.js或其他类似的oop方式,那么构建需要您.

_.bindAll(obj)(下划线metod)也不合适.它在Base.js中突破了.

javascript oop closures

5
推荐指数
1
解决办法
85
查看次数