2017-01-27 4 views
1

Быстрый вопрос относительно Aurelia's <compose> элемент. Я надеялся использовать его для вставки пользовательских элементов в качестве элементов формы, например:Aurelia составить

<!-- Loop through form controls --> 
<div class="form-group" repeat.for="control of controls"> 
    <label><span t="${control.label}"></span></label> 
    <compose view-model="resources/elements/${control.type}/${control.type}" 
    value.bind="control.value" data.bind="control.data" placeholder.bind="control.placeholder"></compose> 
</div> 

Однако, это начинает выглядеть <compose> элемент ограничивается только принятием model, view-model и view параметров. Это верно? Каков наилучший способ передать такие параметры, как value, data, placeholder в пользовательские элементы на основе control.type?

Редактировать с моим Решением:

В конце концов, оказывается, что Аурелия <compose> работает только с view, view-model и model атрибутами. Мое решение передать все данные (может быть несколько элементов передаются как единый объект) как это:

<compose view-model="resources/elements/${control.type}/${control.type}" 
     model.bind="{'control': control, 'model': model, 'readonly': readonly}"> 
</compose> 

Что я сделал нахожу интересным является то, что при использовании model.bind, вам не нужно для получения параметров используйте декоратор @bindable. Они доступны сразу же в представлении.

+0

я только что узнал от Эшли Грант, что вы не можете использовать '@ bindable' с '', и если у вас есть только элемент вида ent, представление связано с внешней областью, но если у вас есть модель представления, вам нужно пройти через 'model.bind'. – LStarky

ответ

2

Как насчет использования model.bind?

<!-- Loop through form controls --> 
<div class="form-group" repeat.for="control of controls"> 
    <label><span t="${control.label}"></span></label> 
    <compose view-model="resources/elements/${control.type}/${control.type}" 
    model.bind="control"></compose> 
</div> 

Тогда вид-модель будет иметь доступ к value, data и placeholder от его имущества model.

2

<compose> имеет доступ к внешнему пространству, поэтому вам не нужно ничего связывать. Это должно работать:

Использование

<compose view-model="resources/elements/${control.type}/${control.type}"></compose> 

HTML

<template>${propertyFromParent}</template> 

Запуск пример https://gist.run/?id=8bb9c5503b4bbb7923a3a4c9e804c656

+0

Является ли эта область доступной только из метода 'bind()' или во все времена? – LStarky

+0

все время после 'bind', я думаю –

+0

Fabio, я пробовал это, и он просто не работает. 'bind() {console.log (" EwTextbox bind(): ", this); } 'только показывает' __observers__' и '__proto__' и не содержит никаких данных от родителя. 'this.control' не определено. – LStarky

Смежные вопросы