AMcoder - javascript, python, java, html, php, sql

Ինչպե՞ս եք ստեղծում FubuMVC վարքագիծ, որը պատճենում է կայքի կազմաձևման արժեքները ելքային մոդելում:

Ես փորձում եմ պարզել, թե ստեղծել վարքագիծ, որը կպատճենի բուլյան կայքի կազմաձևման արժեքը ելքային մոդելում:

Այս կերպ ես ստիպված չեմ լինի պատճենել bool-ը յուրաքանչյուր գործողության մեջ, ում դիտումը պահանջում է դա, այլ պարզապես կարող եմ վարքագիծը ավելացնել վերահսկիչի գործողություններին, որոնց համար անհրաժեշտ է այս արժեքը:

FubuMVC-ի որոշ հին տարբերակներում, ես կարծում եմ, որ վարքագծերը կարող են փոփոխել ելքային մոդելը այն բանից հետո, երբ այն դուրս է եկել վերահսկիչից: Բայց ես վստահ չեմ, թե ինչպես դա անել FubuMVC-ի վերջին տարբերակներում (կամ ես մոռացել եմ):

Որևէ մեկը կարո՞ղ է ինձ օրինակ տալ կամ մատնանշել ինձ կայքի կազմաձևման արժեքը ելքային մոդելում պատճենելու լավագույն փորձի ուղղությամբ:

25.02.2011

Պատասխանները:


1

Ենթադրենք, ես ունեի HomeViewModel անունով ելքային մոդել, որն ուներ FooterText անունով հատկություն, որը ես ուզում էի բեռնել կարգավորումների օբյեկտից (ասենք HomeSettings), որը վերցված էր կոնտեյներից (այսինքն՝ StructureMap):

Վարքը

Իմ պահվածքը նման կլինի.

public class HomeFooterBehavior : BasicBehavior
{
    private readonly HomeSettings _settings;
    private readonly IFubuRequest _request;

    public HomeFooterBehavior(HomeSettings settings, IFubuRequest request)
        : base(PartialBehavior.Executes)
    {
        _settings = settings;
        _request = request;
    }

    protected override DoNext performInvoke()
    {
        SetupFooter();

        return DoNext.Continue;
    }

    public void SetupFooter()
    {
        var viewModel = _request.Find<HomeViewModel>().First();

        viewModel.HomeFooterText = _settings.FooterText;
    }
}

Այս վարքագիծը վերցնում է HomeSettings օբյեկտը և IFubuRequest օբյեկտը (երկուսն էլ ներարկված կախվածություններ), այնուհետև հարցումից ստանում է HomeViewModel (ելքային մոդել) և այնուհետև սահմանում է HomeFooterText հատկությունը ելքային մոդելի վրա՝ հիմնվելով պարամետրերի օբյեկտի արժեքի վրա:

ԾԱՆՈԹԱԳՐՈՒԹՅՈՒՆ. Ես ենթադրում եմ, որ դուք արդեն ունեք ձեր HomeSettings օբյեկտը միացված է կոնտեյների մեջ (օրինակ՝ օգտագործելով FubuMVC-ում ներկառուցված ISettingsProvider նյութը): Եթե ​​դուք դեռ չունեք սա, տեղեկացրեք ինձ, և ես կարող եմ տեղադրել որոշ կոդ, թե ինչպես դա անել:

Կոնվենցիայի միացում

Վարքագիծը լարելու համար դուք պետք է սահմանեք կոնվենցիան IConfigurationAction-ի միջոցով, օրինակ՝

public class HomeFooterBehaviorConfiguration : IConfigurationAction
{
    public void Configure(BehaviorGraph graph)
    {
        graph.Actions()
            .Where(x => x.HasOutput && 
                        x.OutputType().Equals(typeof(HomeViewModel)))
            .Each(x => x.AddAfter(Wrapper.For<HomeFooterBehavior>()));
    }
}

Սա իսկական համր կոնվենցիա է ցուցադրական նպատակներով։ Ձեր նախագծում դուք կարող եք այն մի փոքր ավելի ընդհանուր դարձնել: Օրինակ՝ ցանկացած ելքային մոդել, որն ունի հատկանիշ, կամ իրականացնում է հատուկ ինտերֆեյս և այլն: Փաստորեն, դուք կարող եք ստուգել բոլոր ելքային մոդելները՝ տեսնելու, թե արդյոք դրանք պարունակում են որևէ հատկություն, որը համապատասխանում է որոշակիին: չափանիշները (օրինակ, բոլոր հատկությունները, որոնք ավարտվում են «Կարգավորումներով», ինչպես «FooterSettings» կամ այլ բան):

Մի վախեցեք սահմանել նման լայնածավալ կոնվենցիաներ՝ կապված արդյունավետության հետ կապված խնդիրների հետ, քանի որ այս ամբողջ կոնվենցիայի կոդը գործում է մեկնարկի պահին և ոչ ամեն հարցում:

Նշեք «AddAfter» և «Wrapper.For» զանգը: Դա հիմնականն է նրանով, որ այն տեղադրում է ձեր վարքագիծը հետո վերահսկիչի գործողությունը կատարվում է, բայց նախքան տեսքը ցուցադրելը:

Այժմ, երբ դուք ունեք ձեր վարքագիծը և ձեր կոնվենցիան սահմանված, ժամանակն է այն մուտքագրել ձեր FubuRegistry-ում:

Ձեր կոնվենցիայի միացում ձեր FubuRegistry-ում

«Երթուղիներ» զանգից հետո։ Ձեր FubuRegistry-ում ավելացրեք այսպիսի տող.

ApplyConvention<HomeFooterBehaviorConfiguration>();

Վերակազմավորեք և այն պետք է աշխատի:

Խնդրում եմ տեղեկացնել ինձ, եթե որևէ խնդիր առաջանա:

26.02.2011
  • IFubuRequest-ն այն էր, ինչ ես բացակայում էի, շնորհակալություն: Նաև կոնվենցիայի միացման մանրամասն բացատրությունը հիանալի է: 01.03.2011
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..