2013-02-21 106 views
4

我正在研究日历风格的骨干应用程序,但对它来说相当新颖。我一直在这上面用了12个多小时,仍然无法让我的模板填充JSON数据。在下划线模板中使用JSON对象 - Backbone.js

下面是一些代码,我今天写的:

型号

var CalendarDay = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
      title: "No days for this event", 
      done: false 
     }; 
    }, 
    initialize: function() {} 
}); 

var calendarItem = new CalendarDay({ 
    urlRoot: URL 
}); 

收集

var Calendar = Backbone.Collection.extend({ 
    model: CalendarDay, 
    url: URL 
}); 

查看

var CalendarView = Backbone.View.extend({ 
    template: _.template($('#days').html()), 
    initialize: function() { 
     this.collection = new Calendar(); 
     this.collection.fetch(); 
     this.collection.bind("reset", this.render, this); 
     this.loadTimes(); 
    }, 
    render: function() { 
     var JSON = this.collection.toJSON(); 
     this.$el.html(this.template(JSON)); 
     console.log(JSON); 
    }, 
    listDays: function() { 

    } 

}); 

var calendarView = new CalendarView({ 
    model: calendarItem 
}); 

,这里是我GETT来自服务器的JSON:

(从执行console.log) 连接
0: Object 
activity_logs: Array[0] 
attendee_code: "BBNVKBGT" 
attendee_fee: "0" 
cego_fee: "0" 
certificate_fee: "0" 
created_at: "2013-02-13 11:29:03" 
days: Array[1] 
description: "A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel the charm of existence in this spot, which was created for the bliss of souls like mine." 
disciplines: Array[3] 
done: false 
fee_transaction_id: "0" 
id: "102" 
marketing_materials: Array[0] 
messages: Array[0] 
name: "My very first event" 
organization_id: "1" 
start_at: "2013-02-28 00:00:00" 
state_id: "38" 
states: Array[2] 
title: "No days for this event" 
updated_at: "2013-02-13 11:29:04" 
venue_id: "55" 

是我的控制台日志,JSON的一个更好的视野。 screenshot of JSON

更新:这是我的字符串化JSON:

[{"title":"No days for this event","done":false,"id":"102","organization_id":"1","state_id":"38","venue_id":"55","name":"My very first event","description":"A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel the charm of existence in this spot, which was created for the bliss of souls like mine.","start_at":"2013-02-28 00:00:00","attendee_code":"BBNVKBGT","cego_fee":"0","fee_transaction_id":"0","attendee_fee":"0","certificate_fee":"0","created_at":"2013-02-13 11:29:03","updated_at":"2013-02-13 11:29:04","activity_logs":[],"disciplines":[{"id":"1","label":"Psychologist","desc_text":null,"created":"1152725531","valid":"1","ordering":"-1","assocs":"APA","completion_only":"0","abbr":"psy","created_at":"2006-07-12 10:32:11","updated_at":"0000-00-00 00:00:00","pivot":{"id":"5","created_at":"2013-02-13 11:29:16","updated_at":"2013-02-13 11:29:16","conference_id":"102","discipline_id":"1"}},{"id":"8","label":"Alcohol/Drug Counselor","desc_text":null,"created":"1153074004","valid":"1","ordering":"3","assocs":"NAADAC","completion_only":"0","abbr":"acn","created_at":"2006-07-16 11:20:04","updated_at":"0000-00-00 00:00:00","pivot":{"id":"6","created_at":"2013-02-13 11:29:16","updated_at":"2013-02-13 11:29:16","conference_id":"102","discipline_id":"8"}},{"id":"13","label":"Massage Therapist","desc_text":null,"created":"0","valid":"1","ordering":"6","assocs":null,"completion_only":"1","abbr":"mass","created_at":"2006-07-18 12:01:31","updated_at":"0000-00-00 00:00:00","pivot":{"id":"7","created_at":"2013-02-13 11:29:16","updated_at":"2013-02-13 11:29:16","conference_id":"102","discipline_id":"13"}}],"states":[{"id":"38","code":"OR","name":"Oregon","country_code":"US","pivot":{"id":"6","created_at":"2013-02-13 11:29:16","updated_at":"2013-02-13 11:29:16","conference_id":"102","state_id":"38"}},{"id":"5","code":"CA","name":"California","country_code":"US","pivot":{"id":"5","created_at":"2013-02-13 11:29:16","updated_at":"2013-02-13 11:29:16","conference_id":"102","state_id":"5"}}],"messages":[],"marketing_materials":[],"days":[{"id":"1","conference_id":"102","happens_at":"2013-02-28 00:00:00","start_at":"0000-00-00 00:00:00","end_at":"0000-00-00 00:00:00","created_at":"2013-02-20 12:37:23","updated_at":"2013-02-20 12:37:23"}]}] 

这里是我的模板视图:

<script id="days" type="text/template"> 
      <a class="btn small-btn marginRight"></a> 
    </script> 

只是想我要在这里补充,如果我使用的模板标签上面诸如<% title %>,我得到错误Uncaught ReferenceError: title is not defined

我筋疲力尽,自学中坚比人们想象的要难。任何帮助让这个球再次滚动将是真棒谢谢。

+0

如果您还没有看到它,这里有一个很好的指导骨干,如果你已经知道JQuery的好: https://github.com/kjbekkelund/writings/blob/master/published/understanding-backbone.md – Plynx 2013-02-21 02:28:10

+0

在控制台中,做一个'con sole.log(JSON.stringify(the_json_response))'并且用字符串化的JSON更新了你的问题,所以可以在jsfiddle或类似的工具上使用它。 – Cymen 2013-02-21 02:33:01

+0

你的模板有一个标签?它不会发射除“”之外的任何东西。你需要附加一些数据元素(并处理它是一个集合的事实)... http://underscorejs.org/#template – WiredPrairie 2013-02-21 02:52:10

回答

5

修改视图

this.$el.html(this.template(JSON)); 

this.$el.html(this.template({days: JSON})); 

修改模板

<script id="days" type="text/template"> 
    <% _.each(days, function(day) { %> <a class="btn small-btn marginRight"><%= day.title %></a> <% }); %> 
</script> 
+0

似乎在这里正确的轨道,谢谢一堆。虽然,它只返回我在“CalendarDay”模型中设置的默认值“没有这个事件的日子”。我怎样才能让它显示“happen_at”JSON字段? – 2013-02-21 04:22:38

+0

@MikeLucid试试这个模板:'<%_.each(days,function(day){%><%= day.title %> at <%= day.days[0].happens_at %><% }); %>' – anhulife 2013-02-21 04:52:09

+0

谢谢你的回应。 – 2013-02-21 05:26:00