2014-01-30 117 views
1

我試圖在Typescript中呈現一個模板模板,這不會發生。下面的代碼和瀏覽器錯誤:同步加載HTML模板

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

    constructor(options?:any){ 
     var question = this; 
     require(["text!add-new-question.html"], 
      function(html) { 
       question.template = _.template(html); 
      } 
     ); 
     _.bindAll(this, "render"); 
    } 

    render(){ 
     var data = this.model.toJSON(); 
     var html = this.template(data); 
     return this; 
    } 
} 

錯誤:

Uncaught TypeError: Object #<QuestionView> has no method 'template' Main.ts:49 
QuestionView.render Main.ts:49 
(anonymous function) Main.ts:57 

更新:在渲染後

正如下面指出的,這是因爲需要的功能發生返回結束它的執行。我試圖運行一個setInterval(),它的工作原理。我如何使require函數成爲同步函數?

+1

的我敢打賭,你執行'變種HTML = this.template(數據)後'require'回調返回;'。由於'模板'尚未分配,它不存在並引發該錯誤。 –

+0

你有一點。我如何使這個同步? – EternallyCurious

回答

0

你應該嘗試使用jQuery的AJAX insted的require.js

var ajxParam: JQueryAjaxSettings = { 
    async: false, timeout: 200000, 
    url: "http://somthing", dataType: "html", 
    cache: false, 
    success: (htmltext: any, textStatus: string, jqXHR: JQueryXHR) => { 

    }, 
    error: (jqXHR: JQueryXHR, textStatus: string, errorThrow: string) => { 
      // show error? 
    } 
} 
$.ajax(ajxParam); 
//you can bind your data here