Backbone和Typescript的麻烦

时间:2014-01-27 13:31:16

标签: backbone.js typescript webstorm

我正在学习使用Typescript的骨干,我得到了骨干的头文件。我正在尝试创建一个视图,其中我在render函数中引用了“this”。但是,Webstorm在这方面犯了一个错误:

class QuestionView extends Backbone.View{
    model = new Question();
    template: (data:any) => string;

    constructor(options){
        super(options);
        this.tagName = "div";
        this.template = _.template($("#add-question").html());
        _.bindAll(this, "render");
    }

    render(){
        this.$el.html()(this.template(this.model.toJSON())); // The error is pointing to   the first "this" literal in this line
        return this;
    }
}

错误:

C:/.../Main.ts(40,9): error TS2088: Cannot invoke an expression whose type lacks a call signature.

1 个答案:

答案 0 :(得分:1)

通常会遇到this问题,但这与范围有关,但在您的情况下,它只与您的html方法调用中的拼写错误相关:

render(){
    this.$el.html(this.template(this.model.toJSON())); // fixed
    return this;
}

要设置元素的HTML,你在html方法的括号内传递HTML - 你不小心传递了没有参数(所以这就是GETS HTML,而不是设置HTML),然后试着调用生成的HTML字符串就像一个函数。

this.$el.html() // returns a string of HTML
this.$el.html('<div>Hello World</div>') // sets the html to the supplied string