Aurelia自定义元素中的2路数据绑定 - 将自定义元素绑定到父视图模型

时间:2015-10-23 07:53:09

标签: aurelia aurelia-binding

在我的申请中,我做了很多"服务"我可以在我的视图模型中注入以节省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;。

1 个答案:

答案 0 :(得分:24)

这里有几个问题:

  1. 由于不区分大小写,您需要对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"

  2. 你需要双向绑定。使用装饰器创建selectedValue.bind="property"时,其中一个参数是@bindable,您可以使用它来设置默认绑定模式。

    Aurelia设定了一些合理的默认值,例如BindingMode的默认值是双向的,没有明确的

    如果您不想设置默认绑定模式,您可以明确指出绑定:

    input value.bind=".."

  3. 希望这会有所帮助:)

    编辑:我认为在这个答案之后API有所改变。

    selected-value.two-way="prop"装饰器具有以下标志:

    @bindable

    检查快速参考的最佳位置之一是文档中的Aurelia备忘单:

    http://aurelia.io/docs/fundamentals/cheat-sheet