You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2018/01/04 12:36:00 UTC

[jira] [Commented] (ISIS-1747) Update docs, hints-n-tips for view models

    [ https://issues.apache.org/jira/browse/ISIS-1747?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16311282#comment-16311282 ] 

ASF subversion and git services commented on ISIS-1747:
-------------------------------------------------------

Commit 5c183f0db3d0aee5aff9775bcc5ecc26e27cefff in isis's branch refs/heads/master from [~danhaywood]
[ https://gitbox.apache.org/repos/asf?p=isis.git;h=5c183f0 ]

ISIS-1747: adds hint-n-tip for wicket viewer


> Update docs, hints-n-tips for view models
> -----------------------------------------
>
>                 Key: ISIS-1747
>                 URL: https://issues.apache.org/jira/browse/ISIS-1747
>             Project: Isis
>          Issue Type: Improvement
>    Affects Versions: 1.15.1
>            Reporter: Dan Haywood
>            Assignee: Dan Haywood
>            Priority: Minor
>             Fix For: 1.16.0
>
>
> see https://github.com/incodehq/incode-platform/issues/10
> ~~~~~~~~~
> here's the text that has been removed
> ## Demo App: Highlighting Current
> As a by-the-by, the demo app has one further "trick up its sleeve".
> If you run the app you'll notice that the currently selected `DemoObject` is highlighted in the left-hand table of the `HomePageViewModel`.
> This is accomplished by having the view model collaborate with a subscribing domain service that configures a CSS class.
> We start by ensuring that the `DemoObject` emits an event for its CSS class:
> .DemoObject.java
> ````java
> @DomainObjectLayout(
>         ...
>         cssClassUiEvent = DemoObject.CssClassUiEvent.class
> )
> public class DemoObject ... {
>     public static class CssClassUiEvent
>             extends org.apache.isis.applib.services.eventbus.CssClassUiEvent<DemoObject> {}
>     ...
> }
> ````
> Next, we define the domain service to act as the subscriber.
> Since it will be interact
> .HomePageViewModel.java
> ````java
> public class HomePageViewModel ... {
>     @DomainService(nature = NatureOfService.DOMAIN)
>     public static class CssHighlighter extends AbstractSubscriber {
>         @EventHandler
>         @Subscribe
>         public void on(DemoObject.CssClassUiEvent ev) {
>             if(getContext() == null) {
>                 return;
>             }
>             if(ev.getSource() == getContext().getSelected()) {      // <1>
>                 ev.setCssClass("selected");
>             }
>         }
>         private HomePageViewModel getContext() {                    // <2>
>             return (HomePageViewModel) scratchpad.get("context");
>         }
>         void setContext(final HomePageViewModel homePageViewModel) {
>             scratchpad.put("context", homePageViewModel);
>         }
>         @Inject
>         Scratchpad scratchpad;                                      // <3>
>     }
> }
> ````
> <1> If the domain object is the currently selected then set the CSS class
> <2> Provide methods to set and get the current `HomePageViewModel` (acting as the context)
> <3> Store the context using the `Scratchpad` domain service (request-scoped so thread-safe).
> The `HomePageViewModel` is responsible for setting itself as the context for the domain service:
> .HomePageViewModel.java
> ````java
> public class HomePageViewModel ... {
>     ...
>     public TranslatableString title() {
>         cssHighlighter.setContext(this);    // <1>
>         ...
>     }
>     ...
>     @javax.inject.Inject
>     CssHighlighter cssHighlighter;
> }
> ````
> <1> set the context on the domain service
> Finally we just need some CSS, in the `application.css` file:
> .application.css
> ````css
> .selected {
>     font-style: italic;
>     font-weight: bolder;
> }
> ````



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)