2013-03-28 84 views
0

我使用requireJS結合骨幹骨幹對象:正確的方式來擴展使用需要JS

define([ 

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

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

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

     return viewA; 

}); 

我想創建一個新的視圖模塊,ViewB,具有所有的相同的方法viewA,但是使用不同的模型來代替modelA。我知道我可以重寫的初始化函數,但我不知道是否有一個更簡潔的方式,以避免重複代碼...

define([ 

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

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

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

     return viewB; 

    }); 

回答

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設置爲你在通過實例

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 
}); 
+0

任何理由不僅僅是要求(['views/ViewA'],函數(ViewA){...'而不是'定義'並且做額外的'require'調用?) –

+0

如果你正在定義模塊,是的。 require()'直接運行代碼,而你想要做的是定義一個模塊,即c然後稍後運行:http://requirejs.org/docs/api.html#define – GTF

+0

好的試圖粘貼示例,不能在評論框中。看到這裏:http://requirejs.org/docs/api.html#config(第二個例子)。 – GTF