0

バックボーンと組み合わせてrequireJSを使用しています:

define([

        "jquery",
        "underscore",
        "backbone",
        "models/modelA"

        ], function( $, _, Backbone, MyModel ) {

        var viewA = Backbone.View.extend({
            initialize: function() {
                 this.model = new MyModel();
            }
        });

        return viewA;

});

viewA と同じメソッドをすべて持つが、modelA の代わりに別のモデルを使用する、新しい View モジュール ViewB を作成したいと考えています。初期化関数をオーバーライドできることはわかっていますが、コードの重複を避けるために、より簡潔な方法があるかどうか疑問に思っています...

    define([

        "jquery",
        "underscore",
        "backbone",
        "views/viewA",
        "models/modelB"

        ], function( $, _, Backbone, ViewA, myModel ) {

        var viewB = ViewA.extend({
                initialize: function() {
                     this.model = new MyModel();
                }
        });

        return viewB;

    });
4

2 に答える 2

1
define(['views/ViewA'], function() {
    var ViewA = require('views/ViewA'), // require ViewA
    ViewB = ViewA.extend({
        // add all your ViewB specific methods/properties here
    });

    return ViewB; // return ViewB from the RequireJS module so it can be used elsewhere
});
于 2013-03-28T21:43:08.680 に答える
1

2 つのビューがまったく同じである場合は、初期化でモデルを作成する代わりに、インスタンス化されたモデルを渡すだけです。次に、1 つのビューを定義するだけで済みます。

define([

        "jquery",
        "underscore",
        "backbone"
        // no model module needed here.

        ], function( $, _, Backbone ) {

        var viewA = Backbone.View.extend({
            initialize: function() {
            }
        });

        return viewA;

});

require次に、モデルとビューの両方である他のモジュールで:

var modelA = new ModelA();
var modelB = new ModelB();
// create 2 instances of ViewA with different model passed in
var viewA = new ViewA({model: modelA});
var viewB = new ViewA({model: modelB});

このように作成すると、各ビューはthis.model渡したインスタンスに設定されます。

于 2013-03-28T23:49:18.140 に答える