在我的申请中,我做了很多"服务"我可以在我的视图模型中注入以节省som冗余和时间。
现在我希望更进一步,并制作这些表单元素(选择,文本,复选框 - 为初学者选择下拉列表)并将它们转换为自定义元素,仅在自定义元素中注入服务
我可以在某种程度上使它发挥作用。我需要在" parent"中显示自定义元素(在这种情况下选择)。 view,但是当我更改自定义select元素的选定值时,它不会绑定到" parent" viewmodel,这是我的要求。
我希望能够将我的选定值从自定义元素绑定到" parent"上的属性。 viewmodel通过它的模板中的bind属性。
我会在几分钟内更新一个小代码片段。
create.js(我称之为父视图模型)
import {bindable} from 'aurelia-framework';
export class Create{
heading = 'Create';
@bindable myCustomElementValue = 'initial value';
}
create.html(父视图)
<template>
<require from="shared/my-custom-element"></require>
<my-custom selectedValue.bind="myCustomElementValue"></my-custom>
<p>The output of ${myCustomElementValue} should ideally be shown and changed here, as the select dropdown changes</p>
</template>
MY-custom.js
import { inject, bindable} from 'aurelia-framework';
import MyService from 'my-service';
@inject(MyService )
export class MyCustomCustomElement {
@bindable selectedValue;
constructor(myService ) {
this.myService = myService ;
}
selectedValueChanged(value) {
alert(value);
this.selectedValue = value;
}
async attached() {
this.allSelectableValues = await this.myService.getAllValues();
}
}
最初的情况是create.html视图输出&#34;初始值&#34;,当我更改自定义元素选择的值时,新选择的值会被警告,但它不会更新绑定父变量,它仍然只是显示&#34;初始值&#34;。
答案 0 :(得分:24)
这里有几个问题:
由于不区分大小写,您需要对DOM中的任何属性名称进行kebab-case
df1 <- structure(list(a = c(63L, 78L, 79L, 10L, 11L, 12L, 13L, 16L,
16L, 16L), b = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), c = c("",
"", "", "", "", "", "", "", "", "2014-04-24")), .Names = c("a",
"b", "c"), class = "data.frame", row.names = c(NA, -10L))
<强>不强>
selected-value.bind="property"
你需要双向绑定。使用装饰器创建selectedValue.bind="property"
时,其中一个参数是@bindable
,您可以使用它来设置默认绑定模式。
Aurelia设定了一些合理的默认值,例如BindingMode
的默认值是双向的,没有明确的
如果您不想设置默认绑定模式,您可以明确指出绑定:
input value.bind=".."
希望这会有所帮助:)
编辑:我认为在这个答案之后API有所改变。
selected-value.two-way="prop"
装饰器具有以下标志:
@bindable
检查快速参考的最佳位置之一是文档中的Aurelia备忘单: