2

i want to get a array from json to knockout js. for this i am using this code and i am trying to implement in adobe cq. but i am not able to get the response so any body can help here is my code

in jsp

 <table id="timesheets" class="table table-striped table-hover table-condensed">   
<thead>
    <tr>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Month</th>
        <th>Year</th>
    </tr>
</thead>
   <tbody data-bind="foreach: viewModel.timesheets">
    <tr>
        <td data-bind="text: firstname"></td>
        <td data-bind="text: lastname"></td>
        <td data-bind="text: month"></td>
        <td data-bind="text: year"></td>
    </tr>
</tbody>
 </table>

In Script

<script>
 $(function () {
    ko.applyBindings(viewModel);
    viewModel.loadTimesheets();
});
function timesheet(timesheet) {
    this.id = ko.observable(timesheet.id);
    this.firstname = ko.observable(timesheet.firstname);
    this.lastname = ko.observable(timesheet.lastname);
    this.month = ko.observable(timesheet.month);
    this.year = ko.observable(timesheet.year);
}
var viewModel = {
    timesheets: ko.observableArray([]),

loadTimesheets: function () {
    var self = this;
    $.getJSON("/content/personal/test0/jcr:content/content-page/horizontalline.json",function (timesheets) {
            self.timesheets.removeAll();
            $.each(timesheets, function (index, item) {
                self.timesheets.push(new timesheet(item));
            });
        }
    );
}
};

</script>

in json file

<%@page session="false" %>
<%@ page import="org.apache.sling.jcr.api.SlingRepository" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.day.cq.commons.TidyJSONWriter,
    com.day.cq.tagging.Tag,
    java.util.Locale,
    com.day.cq.wcm.api.WCMMode,
    com.day.cq.tagging.TagManager,
    com.day.cq.tagging.TagCloud" %>

<%

//Local variables
final SlingRepository repos = sling.getService(SlingRepository.class);
final UserManagerFactory umFactory = sling.getService(UserManagerFactory.class);
String pagepath = properties.get("propagePath","");
Session session = null;
List<String> list = new ArrayList<String>();
String listString = "";

try
{

    // Ensure that the currently logged on user has admin privileges.
    session = repos.loginAdministrative(null);

    final TidyJSONWriter writer = new TidyJSONWriter(response.getWriter());

list.add("a");
list.add("b");
list.add("a");
list.add("b");
list.add("a");
list.add("b");

    //Begin writing JSON response
    writer.object();
    writer.key("tagarray").array();
    Iterator<String> it = list.iterator();

        while(it.hasNext()) {
        listString += it.next();
            if(it.hasNext()) {
            listString += ",";
            }
        }
    writer.value(listString);
    writer.endArray();
    writer.endObject();
    session.logout();
}
catch (Exception e)
{
    System.out.println("myajaxsample Exception Occured: " + e.getMessage());
}
finally
{
    session.logout(); 
    session = null;
}
%>

Please help me to resolve this as i am new in knockout

user2142786
  • 1,484
  • 9
  • 41
  • 74

1 Answers1

7

You need your script like this

function timesheet(timesheet) {
    this.id = ko.observable(timesheet.id);
    this.firstname = ko.observable(timesheet.firstname);
    this.lastname = ko.observable(timesheet.lastname);
    this.month = ko.observable(timesheet.month);
    this.year = ko.observable(timesheet.year);
}
var viewModel = {
    timesheets: ko.observableArray([]),
    loadTimesheets: function () {
        var self = this;
        $.getJSON("/content/aib/personal/test0/jcr:content/content-page/horizontalline.json",function (timesheets) {
                self.timesheets.removeAll();
                self.timesheets(timesheets)
            }
        );
    }
};

 $(function () {
    ko.applyBindings(viewModel);
    viewModel.loadTimesheets();
});
Muhammad Raheel
  • 19,823
  • 7
  • 67
  • 103
  • Hi Raheel, it' not working i'm having following Uncaught ReferenceError: Unable to process binding "text: function (){return firstname }" Message: firstname is not defined – user2142786 Aug 06 '14 at 07:16
  • can you post the response of json? – Muhammad Raheel Aug 06 '14 at 07:40
  • I don't know how to see the response . but when i am making a call to json using jquery it is working fine – user2142786 Aug 06 '14 at 08:28
  • `console.log(timesheets)` and this will display result in console of browser press F12 and select console tab then refresh page and you will see the result – Muhammad Raheel Aug 06 '14 at 08:35
  • timesheet[object Object] Uncaught ReferenceError: Unable to process binding "text: function (){return firstname }" Message: firstname is not defined – user2142786 Aug 06 '14 at 09:12
  • 1
    trying doing this `console.log(JSON.stringify(timesheets))` make sure you don't use IE – Muhammad Raheel Aug 06 '14 at 09:15
  • {"jcr:lastModifiedBy":"admin","sling:resourceType":"personal/components/content/horizontalline","jcr:createdBy":"admin","jcr:created":"Wed Aug 06 2014 11:19:32 GMT+0530","jcr:lastModified":"Wed Aug 06 2014 11:19:32 GMT+0530","jcr:primaryType":"nt:unstructured"} these are the properties of the node . – user2142786 Aug 06 '14 at 09:26
  • as you can see this brings some other data that is not related to the `timesheet model` therefore it is not working – Muhammad Raheel Aug 06 '14 at 09:30
  • Thanks for your help raheel.. can you please tell me any perfect book for knockout js i have the knowledge of js but still i'm not able to understand the flow of code. so i want to read it in depth – user2142786 Aug 06 '14 at 09:36
  • The [Documentation](http://knockoutjs.com/documentation/introduction.html) is the best place to learn basics. See [these](http://www.knockmeout.net/blog/archives) blog posts to get command over knockoutjs. See [My Posts](http://raheelshan.wordpress.com/) for some additional techniques. And dont forget to visit knockoutjs questions and answers on this forum – Muhammad Raheel Aug 06 '14 at 09:41
  • ok i will, You are really a nice person . i will surely get frustrate if someone ask so many questions from me. Thanks for your patience – user2142786 Aug 06 '14 at 09:45
  • hi raheel i post another question can u please reply http://stackoverflow.com/questions/25176821/edit-functionality-in-form-using-knockout-js – user2142786 Aug 07 '14 at 07:45
  • shah can u answer this question http://stackoverflow.com/questions/25306449/how-to-pass-value-from-one-view-model-to-another-viewmodel-in-knockout-js – user2142786 Aug 14 '14 at 11:30