0

Backbone で物事を行うには多くの方法があることは知っていますが、私はここで多くの経験を積んでいないので、最善の方法についてアドバイスをお願いします。

データを追加するためのフォームとデータを編集するためのフォームがある基本的な CRUD アプリがありますが、これらは本質的に同じです。そして、実際には同じ DOM 要素に関連付けられています。

したがって、ビューにモデルがあるかどうかに応じて、2 つのフォームを 1 つのビューに含め、適切なテンプレートを提供できます。このようなもの:

var AddEditView = Backbone.View.extend ({
el: $("#add"),
template: $("editTemplate").html();
render: function() {
    if (this.model) {
        var theTmp = _.template(this.template)
        this.$el.html(theTmp(this.model.toJSON()));
    }
    else {
        var theTmp = _.template($("#addTemplate").html());
        this.$el.html(theTmp);
    }
},

}); これはうまくいくと思いますが、イベントで厄介な問題が発生する可能性があります (つまり、イベントが 2 回バインドされます)。

または、同じ dom 要素にアタッチされ、アプリの状態に応じて前後に切り替わる 2 つの完全に別個のビューを作成することもできます (コードの行数が増えます)。

この状況で皆さんは何をお勧めしますか。ビュー内のロジックが多い方が良いですか、それともコード行が多いほどビュー内のロジックが少ないですか?

4

1 に答える 1

2

新しいモデルを作成する場合でも、既存のモデルを編集する場合でもフィールドが同一であると仮定すると、ビューとテンプレートは 1 つだけにすることをお勧めします。ビューをインスタンス化するとき、新しいモデルを作成している場合は、新しいモデルをインスタンス化してビューに渡すだけです。それ以外の場合は、既存のモデルを渡します。

var AddEditView = Backbone.View.extend ({
    render: function() {
        var theTmp = _.template(this.template)
        this.$el.html(theTmp(this.model.toJSON()));
    },
    someSaveEvent: function() {
        this.model.save(); // This will POST if the model isNew() or PUT otherwise
    }
});

var model = new Model(); // If you're creating a new model

var addEditView = new AddEditView({
    model: model
});
于 2013-01-10T22:45:39.550 に答える