0

マリオネットを使用して、質問のリストをレンダリングしようとしています。各質問には、サーバーからも送信される質問タイプの選択リストを含めることができます。このリストは、各質問ではなく、json の最上位に保持することをお勧めします。ItemView で質問をループする方法はありますが、テンプレートの質問タイプにアクセスできますか?

毎回再レンダリングされる 1 つの大きなテンプレートとしてこれを行うことはできますが、それは避けたいと思います。

JSON:

var json = {
        questions: [
            { id: 1, questionType: "FreeText", label: "What is your name?" }
        ],
        questionTypes: [
            { label: "Free Text", qtype: "FreeText" },
            { label: "Single Select", qtype: "Select" },
            { label: "Multi Select", qtype: "MultiSelect" }
        ]
    };

テンプレート:

{{#each questions}}
                <div class="question-editor">
                    <button class="remove-question" data-id="{{this.id}}">X</button>
                    <label for="QuestionType">Question Type:</label> 
                        <select name="QuestionType">
                            {{#each ../questionTypes}}
                                <option value="{{this.qtype}}" {{#isOptionSelected ../questionType this.qtype}} selected="selected" {{/isOptionSelected}}>{{this.label}}</option>
                            {{/each}}
                        </select>
                        <br />
                        <label for="Label">Label:</label> 
                        <input type="text" name="Label" value="{{this.label}}" />
                </div>
            {{/each}}
4

1 に答える 1

0

マリオネットの CompositeView を使用できます。

マリオネットのドキュメントから:

ItemView = Backbone.Marionette.ItemView({
  initialize: function(options){
    console.log(options.foo); // => "bar"
  }
});

CollectionView = Backbone.Marionette.CompositeView({
  itemView: ItemView,

  itemViewOptions: {
    foo: "bar"
  } 
});

各行の itemViewOptions として questionTypes を渡すことができます

于 2013-05-09T06:57:00.637 に答える