Aurelia有字符串插值。如果您将string
,number
或boolean
绑定到该变量,则绑定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>
答案 0 :(得分:3)
Aurelia将绑定表达式的文本解析为抽象语法树(AST),并使用它来确定要观察的属性。它仅观察表达式中引用的属性。
在您的示例中,绑定表达式如下所示:data | objectPrinter
。表达式访问视图模型上的data
属性。这将使Aurelia观察数据属性的变化。 但它永远不会改变。在您的示例中,视图模型的数据属性保持相同的对象实例。唯一改变的是branches
属性,该属性未在objectPrinter表达式中引用,因此它的更新不会导致该绑定重新评估。
这是创建对象打印机的另一种方法:
https://gist.run/?id=9eea8902521f4523ee2c
相关问题(忽略已接受的答案 - 它在您的情况下不会起作用):