Aurelia oneTime绑定行为

时间:2017-06-16 09:56:34

标签: aurelia aurelia-binding

我想知道为什么Aurelia oneTime绑定表现得像这样。 我有这样的HTML。

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

My view-model在打字稿中就像这样,在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 绑定为什么提供空字符串以及如何解决此问题?

1 个答案:

答案 0 :(得分: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";
  });
}