2017-06-16 55 views
0

我想知道爲什麼Aurelia oneTime綁定的行爲如此。 我有這樣的HTML。Aurelia oneTime綁定行爲

<span> ${dbaName & oneTime}</span> 
<input type="text" value.bind="dbaName" spellcheck="false" /> 

我的視圖模型是這樣的打字稿及Ajax調用我正在分配值dbaName成功後:

export class VendorGeneral 
{ 
     dbaName:string; 
     constructor() 
     { 
     } 

     activate() 
     { 
     $.ajax({ 
      url: "servicecall", 
      context: document.body 
     }).done(function() { 
      this.dbaName = "DATA ADMIN"; 
     }); 
     } 
} 

現在什麼HTML將顯示輸出:

<span> ${dbaName & oneTime}</span> **blank** 
<input type="text" value.bind="dbaName" spellcheck="false" /> **DATA ADMIN** 

在Span中,我會得到一個空值或一個空字符串,而在文本框中,我會將Data Admin作爲正確的值。

請讓我知道爲什麼oneTime綁定是給空字符串和如何解決這個問題?

回答

3

oneTime,顧名思義,只會綁定一次,所有進一步的修改都會被忽略。視圖呈現時,dbaName的值爲undefined。因此,跨度的內容將是undefined,這等於'沒有';

我看到您使用的是activate,但是您使用的方式不正確。如果您希望在返回ajax調用後呈現視圖,則必須在activate方法中返回一個promise。喜歡的東西:

activate { 
    return yourPromise() 
    .then(() => this.dbaName = 'admin'); 
} 

我建議你使用aurelia-fetch-client而不是$.ajax。如果你仍然想使用$.ajax你可以試試這個(未經測試的代碼):

activate() { 
    return $.ajax({ 
    url: "servicecall", 
    context: document.body 
    }).then(() => { 
    this.dbaName = "DATA ADMIN"; 
    }); 
}