Aurelia使用值转换器调节打印值

时间:2016-07-12 10:34:17

标签: javascript aurelia

Aurelia有字符串插值。如果您将stringnumberboolean绑定到该变量,则绑定one-way

但是,如果您绑定一个对象并使用ValueConverter,就像我想要的那样,它会被绑定one-time

我如何使用值转换器绑定one-way而不是one-time

我已尝试使用${data | objectPrinter & oneWay},但这不起作用。

Running code can be found on this gist

app.html

<template>
  <div class="row">

<!-- this isn't updated on change                 -->
    <pre>${data | objectPrinter}</pre>

  </div>

  <input value.two-way="data.branches">

<!-- this gets updated                            -->
  ${data.branches}

</template>

app.js

export class App {
  data = {
    branches: "test"
  }
}

export class objectPrinterValueConverter {
  toView(obj){
    return JSON.stringify(obj, null, 4);
  }
}

的index.html

<!doctype html>
<html>
  <head>
    <title>Aurelia</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body aurelia-app>
    <h1>Loading...</h1>

    <script src="https://cdn.rawgit.com/jdanyow/aurelia-bundle/v1.0.3/jspm_packages/system.js"></script>
    <script src="https://cdn.rawgit.com/jdanyow/aurelia-bundle/v1.0.3/config.js"></script>
    <script>
      System.import('aurelia-bootstrapper');
    </script>
  </body>
</html>

1 个答案:

答案 0 :(得分:3)

Aurelia将绑定表达式的文本解析为抽象语法树(AST),并使用它来确定要观察的属性。它仅观察表达式中引用的属性。

在您的示例中,绑定表达式如下所示:data | objectPrinter。表达式访问视图模型上的data属性。这将使Aurelia观察数据属性的变化。 但它永远不会改变。在您的示例中,视图模型的数据属性保持相同的对象实例。唯一改变的是branches属性,该属性未在objectPrinter表达式中引用,因此它的更新不会导致该绑定重新评估。

这是创建对象打印机的另一种方法:

https://gist.run/?id=9eea8902521f4523ee2c

相关问题(忽略已接受的答案 - 它在您的情况下不会起作用):

debug Aurelia ViewModel similar to ko.toJson