Мне удалось создать пользовательский элемент для использования элемента boostrap-select. Тем не менее, я могу передавать/привязывать значения к нему из основного представления (родительского), но я не могу получить выделение из элемента, когда я использую двустороннюю привязку.Двусторонняя привязка не работает на bootstrap-select с aurelia
Мой пользовательский элемент:
import {inject, customElement, bindable} from 'aurelia-framework';
import * as selectpicker from 'bootstrap-select'
@customElement('select-picker')
export class BootStrapSelectPicker {
@bindable selectableValues = null;
@bindable newValue = null;
@bindable selectedValue = 10;
constructor(){
}
attached(){
$('.selectpicker').selectpicker({
style: 'btn-info',
size: 4
});
$('.selectpicker').on('change', function(){
var selected = $(this).find("option:selected").val();
this.selectedValue = selected;
console.log(this.selectedValue);
});
$('.selectpicker').val(this.selectedValue); <-- the selection here is correct
$('.selectpicker').selectpicker('refresh');
}
}
Соответствующее мнение:
<template>
<select class="selectpicker">
<option repeat.for="p of selectableValues">${p}</option>
</select>
</template>
Мой содержащий вид, который использует пользовательский элемент является:
<template>
<require from="./select-picker"></require>
<ul class="list-group">
<li class="list-group-item" repeat.for="p of messageProperties">
<div if.bind="p.propertyType == 'string'">
<div class="form-group">
<label for="ln">Name: ${p.propertyName}</label>
<input type="text" value.bind="p.propertyValue" class="form-control" id="ln" >
</div>
</div>
<div if.bind="p.propertyType == 'integer'">
<div class="form-group">
<label for="ln">Name: ${p.propertyName}</label>
<input type="text" value.bind="p.selectedValue" class="form-control" id="ln" >
<select-picker selectable-values.bind="p.selectableValues"
selected-value.two-way="p.selectedValue"></select-picker>
</div>
</div>
</li>
</ul>
</template>
Я ожидал p.selectedValue для изменения после выбора с помощью элемента управления выбора, как показано здесь, с помощью двухсторонней команды:
selected-value.two-way="p.selectedValue"
Однако p.selectedValue не меняется.
Любые идеи, почему это не работает?
У меня это работает без 'bootstrap-select', используя мой собственный пользовательский элемент. ' rich-dropdown>'. Он выглядит довольно похожим на ваш, за исключением того, что я просто привязываюсь, когда выбор изменяется с помощью 'click.delegate =" selected (item) "'. Я хотел бы попробовать интегрировать bootstrap-select, поэтому я попробую –
Charleh
Спасибо за ответ. Вы видите что-то не так с двусторонней привязкой? Я даже пытался привязаться к «tempvar», думая, что для навигации по объектной структуре, такой как p.selectedValue, может быть проблема, но у меня была та же проблема. –