#javascript #ruby-on-rails #backbone.js #coffeescript
#javascript #ruby-on-rails #backbone.js #coffeescript
Вопрос:
Я работаю над созданием базового приложения survey rails для изучения вложенных моделей. Я использую backbone-relational для связи своих моделей.
Я думаю, что они связаны правильно, но я не могу отобразить каждый из вопросов в опросе. Внутри моего шаблона опроса я могу это сделать @survey.get('questions').length
, и это правильно, но по какой-то причине .each
и то, и for question in @survey.get('questions')
другое выдает ошибку.
Я также попробовал маршрут перебора вопросов в самом представлении, но это также выдает ошибку
Любая помощь в том, чтобы заставить это работать, была бы очень признательна!
Шаблон survey_show.jst.eco
<h2><%= @survey.get('title') %></h2>
<div class="row">
<div class="col-md-8"
<span class="pull-right">Number Taken: <%= @survey.get('number_taken') %>/<%= @survey.get('survey_limit') %></span>
</div>
</div>
<ul class="list-group" id="questions">
<% @survey.get("questions").each %>
<li class="list=group-item">Derp</li>
<% end %>
</ul>
Модель опроса survey.js.coffee
class SurveyMe.Models.Survey extends Backbone.RelationalModel
defaults:
title: 'Enter survey name'
survey_limit: 1000
number_taken: 0
long: false
survey_finished: false
urlRoot: '/surveys'
relations = [{
type: Backbone.HasMany,
key: 'questions',
relatedModel: 'SurveyMe.Models.Question'
reverseRelation: {
key: 'survey',
includeInJSON: 'id'
}
}]
модель вопроса.js.coffee
class SurveyMe.Models.Question extends Backbone.RelationalModel
urlRoot: '/surveys'
relations = [{
type: Backbone.HasMany,
key: 'answers',
relatedModel: 'SurveyMe.Models.Answer'
reverseRelation: {
key: 'question',
includeInJSON: 'id'
}
}]
Обзор survey_show.js.coffee Показать обзор
class SurveyMe.Views.SurveyShow extends Backbone.View
template: JST['templates/surveys/survey_show']
initialize: ->
@model.on('all', @render, this)
@model.on('change', @alert, this)
events: {
'click #back': 'back'
}
render: ->
$(@el).html(@template(survey: @model))
#@model.questions.each(@addQuestion)
this
back: ->
Backbone.history.navigate("surveys",true)
alert: ->
alert('changed titled')
addQuestion: (question) ->
view = new SurveyMe.Views.Question(model: question)
@$('#questions').append(view.render().el)
Просмотр вопроса
class SurveyMe.Views.Question extends Backbone.View
template: JST['templates/surveys/question']
tagName: 'li'
className: 'list-group-item'
events:
'click': 'edit'
edit: ->
Backbone.history.navigate("questions/#{@model.get('id')}",true)
initialize: ->
@render
render: ->
$(@el).html(@template(question: @model))
this
Шаблон вопроса
<%= @question.get('title') %>
<span class="pull-right"><%= @question.get('answers').length %></span>
Ответ №1:
Я понял это. Мне не хватало двоеточия в конце. Итак, это дало мне то, что я хотел:
<ul class="list-group">
<% for question, i in @survey.get("questions"): %>
<li class="list-group-item">
<%= @survey.get("questions")[i]["title"] %>
<ul class="list-group">
<% for answer, j in @survey.get("questions")[i]["answers"]: %>
<li class="list-group-item">
<%= @survey.get("questions")[i]["answers"][j]["title"] %>
</li>
<% end %>
</ul>
</li>
<% end %>
</ul>