预防"这个"从重写TypeScript编译

时间:2016-07-28 23:09:23

标签: typescript polymer polymer-1.0

我正在使用Polymer 1.5,我真的需要"这个"变量不要映射到外面。 我知道typescript会为某些valid reasons执行此操作。

declare var Polymer: any;
var MyBehavior = MyBehavior || {};

MyBehavior.FormSubmit = {
    _setInvalid: (query, status) => {
        var elems = Array.prototype.slice.call(Polymer.dom(this.root).querySelectorAll(query));
        elems.forEach(element => {
            if (status) {
                element.setAttribute('invalid', status);
            }
            else {
                element.removeAttribute('invalid');
            }
        });
    }
};

然后将映射到:

$this = this; 
var MyBehavior = MyBehavior || {};

MyBehavior.FormSubmit = {
    _setInvalid: (query, status) => {
        var elems = Array.prototype.slice.call(Polymer.dom($this.root).querySelectorAll(query));
        elems.forEach(element => {
            if (status) {
                element.setAttribute('invalid', status);
            }
            else {
                element.removeAttribute('invalid');
            }
        });
    }
};

见上面这个变量?这将打破代码。如果我可以访问" this.root"或等同于“奇迹”。有没有办法阻止TypeScript移动"这个"?

P.S:我刚认识PolymerTS!不幸的是,我不能让它从Polymer对象调用行为。

1 个答案:

答案 0 :(得分:5)

注意我没有使用箭头功能,而是常规功能

getActivity() == null

箭头函数与常规函数语法不同的一种方法是在箭头函数内部将此关键字绑定到类/对象。

为了确保在将箭头函数(ECMAScript 6)转换为ECMAScript 5时,“this”的含义不会改变,typescript编译器使用

MyBehavior.FormSubmit = {
    _setInvalid: function(query, status) {
        var elems = Array.prototype.slice.call(Polymer.dom(this.root).querySelectorAll(query));
        elems.forEach(element => {
            if (status) {
                element.setAttribute('invalid', status);
            }
            else {
                element.removeAttribute('invalid');
            }
        });
    }
};

Trick,这是一种旧的JavaScript模式。