1

私はウェブにかなり慣れていないので、これが可能かどうかはわかりません。したがって、基本的に私がやりたいことは、配列を反復処理し、配列内の各要素について、バックボーン ビューに適切な情報を入力することです。私ができると思ったのは、このテンプレートを .cshtml で宣言することです。

<div id="template-sample-validation-error">
    <form id="sample-validation-form" class="form">
                <div id="sampleName" class="control-label">Sample Name:</div>
        </form>
</div>

(実際のテンプレートにはさらに多くのフィールドがありますが、すべてを含めたわけではありません)。

そのため、そのテンプレートを使用して、ビューをそのテンプレートにバインドし、コレクション内の各アイテムに新しいテンプレートを追加できると考えました。問題は、id が一意ではないため、バックボーン ビューの初期化メソッドで一意のアイテムを取得できないことです。

// some of the backbone view
SampleValidationView = (function() {
    return Backbone.View.extend({
        initialize: function (sample) {
            var sampleMessage = sample.get('sampleName');

// iterating and creating a SampleValidationView to render
_.each(samples, function (aView) {                
            var errorView = new SampleValidationView(aView);
            this.$('#template-sample-validation-error').append(errorView.render().$el);
        });

次に、この投稿を見つけました。これは、基本的にdivに数字を追加して、divを一意にします。
一意の ID を持つ動的 div を作成する - jQuery

自分が作成したテンプレートでこのようなことを行う方法がわかりませんでした。別の方法は、投稿で行われたことと同様のことを行うことだと思いますが、ビューごとにテンプレートを用意し、配列内のアイテムの数に基づいて各ビューを互いに追加するだけの方がきれいだと思いました。しかし、私は立ち往生しています。どんな考えでも大歓迎です。ありがとう!

4

1 に答える 1

1

テンプレートにアンダースコアを使用している場合は、ID の末尾に <%= %> を追加して、渡されたモデルまたはオブジェクトの ID を追加できます。例:

<div id-"unique-id-<%= id %>">
    ...content
</div>

_.template({id : 1}) を呼び出したときにテンプレートに渡したモデルまたはオブジェクトの ID を入れるだけです。これは次のようになります。

<div id-"unique-id-1">
    ...content
</div>

jquery で #template-sample-validation-error を明示的に見つける代わりに、ビューの el var を宣言する必要があります。これにより、単純に this.$el を呼び出すことができます。だから多分このようなもの:

// some of the backbone view
SampleValidationView = (function() {
    return Backbone.View.extend({

        el : '#template-sample-validation-error',
        template : _.template($('#template-sample-validation-error').html()),

        initialize: function (sample) {
            var sampleMessage = sample.get('sampleName');
        },

        render : function(){
            this.$el.html(this.template({id : 1})); // Some unique id

            // iterating and creating a SampleValidationView to render
            _.each(samples, function (aView) {                
                var errorView = new SampleValidationView(aView);
                this.$el.append(errorView.render().$el);
        }
    });
于 2013-04-02T03:58:02.543 に答える