Search code examples
knockout.jsknockout-mvc

How to set On click event in KnockoutJs


I am new to knockoutjs In my project I have list of Reports. when a user clicks on one of the Reports, The next div(ReportContentdiv) should show all the Sub Reports(SubReportName, SubReportDate, SubReportNote, SubReportType) of the report in tabular format. I dont know how to do it. Any help is greatly appreciated

Here is my code

@@@@@@

--HTML
<div id="ReportNamediv">
<ul class="ulclass">
    <div data-bind="template: {name: 'ReportData',foreach:$root.Report}">
    </div>
</ul>
</div>
<div id="ReportContentdiv">
    //Show Report Content here
</div>

@@@@@@@@

--Script
 <script type="text/html" id="ReportData">
    <li><a href="#"><span data-bind="text: ReportName"></span></a></li>
 </script>

Solution

  • t's a little difficult to give a precise answer without seeing your javascript model, so I will make some assumptions. Note: I have changed the name $root.Report to $root.Reports, as it is a list the plural makes more sense.

    Javascript Model

    var model = {
        Reports: ko.observableArray([]), //An observable list of reports...you can set this yourself.
        SelectedReport: ko.observable(null) 
    };
    

    HTML

    <div id="ReportNamediv">
        <ul class="ulclass" data-bind="foreach:Reports">
              <li>
                 <a data-bind="click:$root.SelectedReport">
                          <span data-bind="text: ReportName"></span>
                 </a>
             </li>
        </ul>
    </div>
    <div id="ReportContentdiv" data-bind="with:SelectedReport">
        <table data-bind="foreach:SubReports">
            <tr>
                <td data-bind="text:SubReportName"></td>
                <td data-bind="text:SubReportDate"></td>
                <td data-bind="text:SubReportNote"></td>
                <td data-bind="text:SubReportType"></td>
            </tr>
        </table>
    </div>