<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8.1 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="Olivier Lamy" />
    <meta name="Date-Creation-yyyymmdd" content="20120119" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Archiva &#x2013; Knockout binding</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
      <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
        
        
        <!-- Google Analytics -->
        <script src='//www.google-analytics.com/analytics.js'></script>
        <script>
          window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;

          ga('create', 'UA-140879-5', 'auto');
          ga('send', 'pageview');

        </script>
      </head>
    <body class="topBarEnabled">
                      <a href="https://github.com/apache/archiva">
      <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
        src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"
        alt="Fork me on GitHub">
    </a>
      <div id="topbar" class="navbar navbar-fixed-top ">
      <div class="navbar-inner">
            <div class="container"><div class="nav-collapse">
            <ul class="nav">
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Introduction <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="../index.html" title="About">About</a></li>
            <li><a href="../download.html" title="Downloads">Downloads</a></li>
            <li><a href="../versions.html" title="Versions">Versions</a></li>
            <li><a href="../mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
            <li><a href="../security.html" title="Security">Security</a></li>
            <li class="dropdown-submenu">
<a href="../" title="Documentation">Documentation</a>
              <ul class="dropdown-menu">
                  <li><a href="../docs/2.2.5/" title="Release 2.2.5">Release 2.2.5</a></li>
                  <li><a href="../docs/3.0.0-SNAPSHOT/" title="Dev 3.0.0-SNAPSHOT">Dev 3.0.0-SNAPSHOT</a></li>
              </ul>
            </li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Development <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="../developers/building.html" title="Build Apache Archiva">Build Apache Archiva</a></li>
            <li><a href="../get-involved.html" title="Get involved">Get involved</a></li>
            <li><a href="../developers/how-we-do-things.html" title="How we do things">How we do things</a></li>
            <li class="dropdown-submenu">
<a href="../" title="Developer Reference">Developer Reference</a>
              <ul class="dropdown-menu">
                  <li><a href="../ref/2.2.5/index.html" title="Archiva 2.2.5">Archiva 2.2.5</a></li>
                  <li><a href="../ref/3.0.0-SNAPSHOT/index.html" title="Archiva 3.0.0-SNAPSHOT">Archiva 3.0.0-SNAPSHOT</a></li>
                  <li><a href="../redback/core/3.0.0-SNAPSHOT/index.html" title="Redback 3.0.0-SNAPSHOT">Redback 3.0.0-SNAPSHOT</a></li>
              </ul>
            </li>
            <li><a href="../redback/index.html" title="Redback">Redback</a></li>
            <li><a href="../components/index.html" title="Archiva Components Project">Archiva Components Project</a></li>
            <li class="dropdown-submenu">
<a href="../jsui/index.html" title="Javascript application Architecture">Javascript application Architecture</a>
              <ul class="dropdown-menu">
                  <li><a href="../jsui/rest.html" title="Rest service">Rest service</a></li>
                  <li><a href="../jsui/template-loading.html" title="JS Template loading">JS Template loading</a></li>
                  <li><a href="../jsui/i18n.html" title="i18n">i18n</a></li>
                  <li><a href="../jsui/knockout-binding.html" title="Knockout Binding">Knockout Binding</a></li>
                  <li><a href="../jsui/generics-js.html" title="Generic Javascipts">Generic Javascipts</a></li>
              </ul>
            </li>
            <li><a href="../developers/releasing.html" title="Releasing">Releasing</a></li>
            <li><a href="../developers/publishing-site.html" title="Site Publish">Site Publish</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="https://www.apache.org/foundation/how-it-works.html" title="How Apache Works">How Apache Works</a></li>
            <li><a href="https://www.apache.org/foundation/" title="Foundation">Foundation</a></li>
            <li><a href="https://www.apache.org/foundation/sponsorship.html" title="Sponsoring Apache">Sponsoring Apache</a></li>
            <li><a href="https://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li class="dropdown-submenu">
<a href="../project-info.html" title="Project Information">Project Information</a>
              <ul class="dropdown-menu">
                  <li><a href="../ci-management.html" title="CI Management">CI Management</a></li>
                  <li><a href="../mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
                  <li><a href="../issue-management.html" title="Issue Management">Issue Management</a></li>
                  <li><a href="../licenses.html" title="Licenses">Licenses</a></li>
                  <li><a href="../team.html" title="Team">Team</a></li>
                  <li><a href="../scm.html" title="Source Code Management">Source Code Management</a></li>
              </ul>
            </li>
        </ul>
      </li>
              </ul>
<form id="search-form" action="https://www.google.com/search" method="get"  class="navbar-search pull-right" >
      <input value="https://archiva.apache.org/" name="sitesearch" type="hidden"/>
  <input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript">asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
                    </div>
        </div>
      </div>
    </div>
    <div class="container">
      <div id="banner">
        <div class="pull-left"><a href="http://archiva.apache.org/index.html" id="bannerLeft"><img src="http://archiva.apache.org/images/archiva.png"  alt="Apache Archiva"/></a></div>
        <div class="pull-right"><a href="http://www.apache.org/" id="bannerRight"><img src="https://www.apache.org/images/asf_logo_wide_2016.png"  alt="Apache Software Foundation"/></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li class=""><a href="https://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../" title="Archiva">Archiva</a><span class="divider">/</span></li>
    <li class="active ">Knockout binding</li>
        <li id="publishDate" class="pull-right">Last Published: 15 Jun 2020</li>
        </ul>
      </div>
        <div id="bodyColumn" >
<div class="section">
<h2><a name="Knockout_binding"></a>Knockout binding</h2>
<p>Explanation on the managed repositories list/edit/add screen.</p>
<ul>
<li><a href="#Knockout_binding">Knockout binding</a>
<ul>
<li><a href="#Javascript_Beans">Javascript Beans</a></li>
<li><a href="#View_Model">View Model</a>
<ul>
<li><a href="#First_you_must_insert_your_template_in_the_main-content_div">First you must insert your template in the #main-content div</a></li>
<li><a href="#You_can_now_create_your_view_model.">You can now create your view model.</a></li>
<li><a href="#Grid_binding">Grid binding</a></li></ul></li>
<li><a href="#View_definition">View definition</a>
<ul>
<li><a href="#Binding_definition">Binding definition</a></li>
<li><a href="#Template_content">Template content</a></li></ul></li></ul></li></ul>
<div class="section">
<h3><a name="Javascript_Beans"></a>Javascript Beans</h3>
<p>First you must map the json response on a Javascript bean (a bit borying task :-) )</p>
<div class="source"><pre class="prettyprint">Java class with fields

public class ManagedRepository
  //private String id;

  //private String name;
  ....

Javascript
ManagedRepository=function(id,name,.....){

  this.id=ko.observable(id);

  this.name=ko.observable(name);

mapping function (to map the json result to your javascript beans)

  mapManagedRepositories=function(data){
    var mappedManagedRepositories = $.map(data.managedRepository, function(item) {
      return mapManagedRepository(item);
    });
    return mappedManagedRepositories;
  }
  mapManagedRepository=function(data){
    if (data==null){
      return null;
    }
    return new ManagedRepository(data.id,data.name,data.layout,data.indexDirectory,data.location,data.snapshots,data.releases,
                                 data.blockRedeployments,data.cronExpression,
                                 data.scanned,data.daysOlder,data.retentionCount,data.deleteReleasedSnapshots,data.stageRepoNeeded);
  }
</pre></div>
<p><tt>NOTE to have access to field values you must now managedRepository.name() </tt></p></div>
<div class="section">
<h3><a name="View_Model"></a>View Model</h3>
<div class="section">
<h4><a name="First_you_must_insert_your_template_in_the_main-content_div"></a>First you must insert your template in the #main-content div</h4>
<div class="source"><pre class="prettyprint">// it's a jquery template as we do some i18n transformations
$(&quot;#main-content&quot;).html($(&quot;#repositoriesMain&quot;).tmpl());</pre></div></div>
<div class="section">
<h4><a name="You_can_now_create_your_view_model."></a>You can now create your view model.</h4>
<div class="source"><pre class="prettyprint">ManagedRepositoriesViewModel=function(){
  //field which will receive values
  this.managedRepositories=ko.observableArray([]);
  // method which will edit an entry: an other view model is created
  editManagedRepository=function(managedRepository){
    var viewModel = new ManagedRepositoryViewModel(managedRepository,true,self);
    ...
    ko.applyBindings(viewModel,$(&quot;#main-content #managed-repository-edit&quot;).get(0));
    ..
  }
  // method which will delete an entry
  removeManagedRepository=function(managedRepository){
    ......
  }
}</pre></div></div>
<div class="section">
<h4><a name="Grid_binding"></a>Grid binding</h4>
<p>The ManagedRepositoriesViewModel is used as it with a custom grid binding (knockout has a feature to create own binding so we use one called <tt>simpleGrid</tt> which will display grids.</p>
<p>Grid view initialisation code (some details omitted) :</p>
<div class="source"><pre class="prettyprint">    var managedRepositoriesViewModel = new ManagedRepositoriesViewModel();

    $.ajax(&quot;restServices/archivaServices/managedRepositoriesService/getManagedRepositories&quot;, {
        type: &quot;GET&quot;,
        dataType: 'json',
        success: function(data) {
          // data mapping json -&gt; javascript
          managedRepositoriesViewModel.managedRepositories(mapManagedRepositories(data));
          // we define here our grid view model for fields only displayed
          managedRepositoriesViewModel.gridViewModel = new ko.simpleGrid.viewModel({
            data: managedRepositoriesViewModel.managedRepositories,
            columns: [
              {
                headerText: $.i18n.prop('identifier'),
                rowText: &quot;id&quot;
              },
              {
                headerText: $.i18n.prop('name'),
                rowText: &quot;name&quot;
              },
              {
              headerText: $.i18n.prop('type'),
              rowText: &quot;getTypeLabel&quot;,
              // FIXME i18n
              title: &quot;Repository type (default is Maven 2)&quot;
              }
            ],
            // max items per size, the binding has a pagination feature
            pageSize: 5,
            // we can define here a callback function which be called on all grid change (adding/updating/removing values from the array)
            gridUpdateCallBack: function(){
              $(&quot;#main-content #managed-repositories-table [title]&quot;).tooltip();
            }
          });
          // apply the binding on the specified node
          ko.applyBindings(managedRepositoriesViewModel,$(&quot;#main-content #managed-repositories-table&quot;).get(0));
        }
      }
    );</pre></div></div></div>
<div class="section">
<h3><a name="View_definition"></a>View definition</h3>
<div class="section">
<h4><a name="Binding_definition"></a>Binding definition</h4>
<p>We have applyed binding on the node with id &quot;#managed-repositories-table&quot;. The binding definition is:</p>
<div class="source"><pre class="prettyprint">  &lt;table class=&quot;bordered-table zebra-striped&quot; id=&quot;managed-repositories-table&quot;
         data-bind=&quot;simpleGrid: gridViewModel,simpleGridTemplate:'ko_managed-repositoriesGrid',pageLinksId:'managed-repositoriesPagination',data:'managedRepositories'&quot;&gt;
  &lt;/table&gt;</pre></div>
<ul>
<li>simpleGrid: gridViewModel = field name for the view model (see sample above)</li>
<li>simpleGridTemplate:'ko_managed-repositoriesGrid' = name of the template to use (see below)</li>
<li>pageLinksId:'managed-repositoriesPagination' = name of the template to use for pagination.</li>
<li>data:'managedRepositories' = fields which contains data to pass to pass to the template</li></ul></div>
<div class="section">
<h4><a name="Template_content"></a>Template content</h4>
<p>Template used for grid display (some details omitted).</p>
<div class="source"><pre class="prettyprint">&lt;script id='ko_managed-repositoriesGrid' type='text/x-jquery-tmpl'&gt;
  &lt;thead&gt;
      &lt;tr&gt;
        // display read only fields defined in ko.simpleGrid.viewModel.columns (see above)
        {{each(i, columnDefinition) columns}}
          &lt;th title=&quot;${ columnDefinition.title }&quot;&gt;${ columnDefinition.headerText }&lt;/th&gt;
        {{/each}}
        &lt;th&gt;Releases&lt;/th&gt;
        .....
        // custom columns
        &lt;th&gt;${$.i18n.prop('edit')}&lt;/th&gt;
        &lt;th&gt;${$.i18n.prop('delete')}&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      {{each(i, row) itemsOnCurrentPage()}}
          &lt;tr&gt;
            // display read only fields defined in ko.simpleGrid.viewModel.columns (see above)
            {{each(j, columnDefinition) columns}}
              &lt;td&gt;${ typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText] }&lt;/td&gt;
            {{/each}}
            // custom columns which images depending on a value
            &lt;td&gt;
            {{if row.releases() == true}}
              &lt;img src=&quot;images/weather-clear.png&quot; title=&quot;${$.i18n.prop('release.included')}&quot;/&gt;
            {{else}}
              &lt;img src=&quot;images/dialog-error.png&quot; title=&quot;${$.i18n.prop('release.notincluded')}&quot;/&gt;
            {{/if}}
            &lt;/td&gt;
            .....
            // custom columns with binding mapped to ManagedRepositoriesViewModel methods
            &lt;td&gt;&lt;a href=&quot;#&quot; data-bind=&quot;click: function(){ editManagedRepository(row) }&quot;&gt;${$.i18n.prop('edit')}&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;
              &lt;a href=&quot;#&quot; data-bind=&quot;click: function(){ removeManagedRepository(row) }&quot;&gt;
                &lt;img src=&quot;images/edit-cut.png&quot; title=&quot;${$.i18n.prop('delete')}&quot;/&gt;
              &lt;/a&gt;
            &lt;/td&gt;
            .....
          &lt;/tr&gt;
      {{/each}}
  &lt;/tbody&gt;
</pre></div></div></div></div>
        </div>
    </div>
    <hr/>
    <footer>
      <div class="container">
        <div class="row">
<div class="row pull-left">Apache Archiva, Archiva, Apache, the Apache feather logo, and the Apache Archiva project logos are trademarks of The Apache Software Foundation.</div>
      <div class="row">
        &nbsp;
      </div>
      <div class="row">
      <p>
        <a href="https://archiva.apache.org/privacy-policy.html">Privacy Policy</a>
        </p>
      </div>
        </div>
        <p id="poweredBy" class="pull-right">  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
  </p>
                          <div id="ohloh" class="pull-right">
      <script type="text/javascript" src="https://www.ohloh.net/p/6670/widgets/project_thin_badge.js"></script>
    </div>
        </div>
    </footer>
    </body>
</html>