Я строю приборную панель, используя компоненты мифрила. Панель инструментов состоит из общих компонентов виджета, которые содержат гнездо более специфичные компоненты, такие как виджеты twitter, виджеты продаж и т. Д. Общий виджет является агностиком вложенного компонента.Javascript - Вложенные компоненты мифрила
Теперь у меня есть требование дополнять общий виджет из вложенного компонента. Например, общий виджет имеет панель инструментов с общими операциями с удалением &, я хочу добавить внутренние операции, такие как диапазон дат изменения в случае виджета продажи, изменить учетную запись в случае виджета Twitter.
прямо вперед подход к этому является разлагаются внутренний компонент 2 subcompoents панель инструментов и контента, например, sales_toolbar_component & sales_content_component. Обе эти подкомпонентные сети нуждаются в одних и тех же данных, загружаемых через ajax, следовательно, это приведет к дублированию. Подход должен следовать Гибридная архитектура (http://mithril.js.org/components.html#hybrid-architecture), где компонент верхнего уровня будет выполнять вызовы ajax и передавать данные в конструкторе каждого подкомпонента. Однако в этом случае родительский компонент является общим, не знает о требованиях к данным для детей.
Другой подход заключается в том, чтобы один подкомпонент выполнял вызов ajax и уведомлял о браке по образцу наблюдателя, это, по-видимому, немного внутренняя связь/зависимость
Еще одно соображение заключается в создании компонента, который может иметь несколько представлений & для родителей, чтобы сделать каждый вид в соответствии с требованиями, используя один и тот же контроллер instance.Something как:
//create a component whose controller and view functions receive some arguments
var component = m.component(MyComponent, {name: "world"}, "this is a test")
var ctrl = new component.controller() // logs "world", "this is a test"
m.component(MyComponent.toolbar(ctrl));
m.component(MyComponent.content(ctrl));
ни один из них не кажется полным, есть шаблон сравнения, который я могу рассмотреть?
Спасибо @barny, на основе подхода MultiView. Я создал 2 fiddlers https://jsfiddle.net/chifer/f8y1ndwg/1/. Это реализация шаблона, который вы описали, однако он предполагает, что виджет представляет собой компонент вида без контроллера. где https://jsfiddle.net/chifer/rLv1pLg8/ - поддерживает виджетов, чтобы иметь контроллер и ссылается на внутренний контроллер виджетов как на собственность, люблю слышать вашу мысль специально на втором скрипаче. – chifer
Ive принял ответ, надеюсь, что вы получите возможность взглянуть на комментарий jsfiddle.net/chifer/f8y1ndwg/1 & jsfiddle.net/chifer/rLv1pLg8. Было бы неплохо, если рецепты мифрила включают simmilar – chifer
Ha cool. Однако я не понимаю смысла в этих примерах. Почему бы просто не иметь нормальный компонент? https://jsfiddle.net/barney/95t587fb/ – Barney