在 Aurelia 中,假设我有一个字符串,其中包含一个插值表达式 "Today at ${value | date: 'time'}"
和一些表示此 的绑定(bind)上下文的对象{值(value):新的日期()
。
有什么方法可以在 View 之外只获取该字符串和该对象,并获得结果格式化字符串,即 "Today at 13:44"
?
我查看了 tests ,但它们都涉及创建 HTML 元素、绑定(bind),然后解除绑定(bind)——我想知道所有这些可能带来的性能开销是多少,以及是否有更简单的方法来实现这一点?如果有一种轻量级的方法来根据上下文对象评估这样的字符串,而无需设置和拆除绑定(bind)等,那将是非常棒的。
最佳答案
这是一个例子:https://gist.run?id=a12470f6e9f7e6a605b3dd002033fdc7
expression-evaluator.js
import {inject} from 'aurelia-dependency-injection';
import {ViewResources} from 'aurelia-templating';
import {Parser, createOverrideContext} from 'aurelia-binding';
@inject(Parser, ViewResources)
export class ExpressionEvaluator {
constructor(parser, resources) {
this.parser = parser;
this.lookupFunctions = resources.lookupFunctions;
}
evaluate(expressionText, bindingContext) {
const expression = this.parser.parse(expressionText);
const scope = {
bindingContext,
overrideContext: createOverrideContext(bindingContext)
};
return expression.evaluate(scope, this.lookupFunctions);
}
}
app.js
import {inject} from 'aurelia-dependency-injection';
import {ExpressionEvaluator} from './expression-evaluator';
@inject(ExpressionEvaluator)
export class App {
message = 'Hello World!';
constructor(evaluator) {
this.message = evaluator.evaluate('foo.bar.baz | test', { foo: { bar: { baz: 'it works' } } });
}
}
编辑
我忽略了一个事实,即您需要解析一个插值 表达式,而不是一个正则绑定(bind)表达式...
aurelia-validation 中有一个这样的例子:https://github.com/aurelia/validation/blob/master/src/implementation/validation-message-parser.ts
关于javascript - 如何在 View 外评估 Aurelia 插值表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122849/