奥蕾莉亚选择不正确绑定
Aurelia Select Not Binding Properly
我有以下组件:
import {inject, customElement, bindable} from 'aurelia-framework';
import {I18N} from 'aurelia-i18n';
import {Router} from 'aurelia-router';
import {HubFactory} from 'service';
import {hub} from 'enums';
@customElement('language-switcher')
@inject(Element, I18N, Router, HubFactory)
export class LanguageSwitcher {
languageMatcher = (a, b) => {console.log(a,b); a.id === b.id;}
@bindable languages = [];
@bindable selectedLanguage = {};
constructor(element, i18n, router, hubFactory) {
this.element = element;
this.i18n = i18n;
this.router = router;
this.usmHub = hubFactory.getHub(hub.usersSessionManagementHub);
}
switchLanguage() {
...
}
}
与以下模板:
<template>
<form role="language" class="navbar-form navbar-left m-t-1">
<div class="input-group">
<select value.bind="selectedLanguage" change.delegate="switchLanguage()" matcher.bind="languageMatcher" class="form-control">
<option repeat.for="language of languages" model.bind="language">${language.shortName}</option>
</select>
</div>
</form>
</template>
在父视图中像这样使用:
<language-switcher languages.bind="languages" selectedLanguage.bind="selectedLanguage"></language-switcher>
我遇到的问题是,选择不使用selectedLanguage作为默认选择选项,并且在匹配器函数中记录b的默认空对象。a对象被正确记录。
在父VM中,语言和selectedLanguage的计算方式如下,当我检查它们时,它们都返回一个值:
get languages() {
return this.session.getSupportedLanguages();
}
get selectedLanguage() {
return this.session.getDefaultLanguage();
}
语言被正确填充,但是所选择的语言没有。会话对象中的两个方法都指向同一个数组。请告诉我哪里做错了。
每种语言都有一个id属性。
提前感谢
-
当绑定到混合大小写属性(如
@bindable selectedLanguage
)时,使用kebab大小写(如selected-language.bind="..."
)。这是必需的,因为DOM会自动将所有内容小写。 -
当声明一个作为"value"的可绑定属性时,将它的默认绑定模式设置为"two - way"。这样,您就可以在模板中使用
.bind
,而不需要记住使用.two-way="..."
显式地双向绑定到属性:@bindable({ defaultBindingMode: bindingMode.twoWay }) defaultLanguage;
-
确保你的匹配器函数返回真/假。你的匹配器缺少一个
return
语句!
下面是一个修复了这三个问题的运行示例:https://gist.run/?id=9f96ac9d135fb39f4b7c172a23e6859c
好了,我刚刚意识到我需要为selectLanguage的可绑定属性使用kebab大小写。
我在你的代码中看到两个问题:
1 -绑定HTML表达式应转换为kebab case。所以,不用
selectedLanguage.bind="selectedLanguage"
应该使用:
selected-language.bind="selectedLanguage"
2 -为什么要使用getter ?你可以直接绑定属性:
运行示例https://gist.run/?id=bcd7841ed21616136d5b6ab259a9d9c2
- AngularJS 1.5.x服务未正确绑定,并且未在控制器中更新
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- Jquery函数无法处理动态加载的内容(不是绑定函数)
- jQuery:click() 执行而不是绑定
- d3.js enter()未正确绑定到数据-正在重新创建现有数据
- 使用具有挖空的外部.js文件不应用绑定
- 挖空.js - 在下拉列表中设置属性,而不永久绑定到模型
- AngularJS 指令未正确绑定属性
- Jquery 不会绑定到新的附加元素
- 将 json 正确绑定到 Kendo DropDownList
- 为什么模型在 nodejs 中没有正确绑定
- KNOCKOUTJS 映射嵌套元素不是绑定的
- Knockout JS值不显示/绑定/更新,但可通过ko.toJS($data).value获得
- 为什么 knockoutjs 无法正确绑定
- 为什么这个 angularjs 指令不显示绑定的文档
- 棱角分明.js ng 样式不会绑定值
- jQuery 移动页面容器如何正确绑定事件
- 动态复选框不能与ng-model正确绑定
- 不能正确绑定observable的数组
- 奥蕾莉亚选择不正确绑定