2012-08-22 44 views
1

我需要一個視圖需要骨幹,Undescore和jQuery等骨幹與requirejs:查看和子視圖和r.js

例如

define(['jquery','undescore','backbone','subviewA', 'subviewB'], function($,_,Backbone, SubviewA, SubviewB){ 
    var View = Backbone.View.extend({ 
     //other methods here 
     render : function() { 
      this.subviewA = new SubviewA(); 
      this.subviewA.render(); 
      this.subviewB = new SubviewB(); 
      this.subviewB.render(); 
      return this; 
     } 
    }); 
}); 

子視圖例如

define(['jquery','undescore','backbone','text!templates/subviewA'], function($,_,Backbone, template){ 
    var SubviewA = Backbone.View.extend({ 
     //other methods here 
     render : function() { 
      this.$el.html(template); 
      return this; 
     } 
    }); 
}); 

我問題是如果我需要在子視圖中包含jquery,exccore和backbone,我可以省略它們嗎?

編輯

我要求在r.js因爲我需要每次都告訴它不要biuld每個模塊內部的依賴關係。

+0

您可以粘貼您的某個'SubView'模塊的代碼嗎?您應該能夠像上面那樣列出依賴關係。 – JonnyReeves

+0

你不需要在這個視圖中使用jquery和下劃線,但可能需要在你的子視圖中至少使用jquery。一般來說,你需要一個你在該模型或視圖中直接使用的東西的要求 – Krym

回答

0

理論上,如果您在視圖中不使用$或_符號,則不需要將jquery和下劃線列爲模塊的直接依賴關係(無論是視圖還是子視圖都不會更改那)。 你確實需要包括主幹,因爲你直接引用:Backbone.View。如果你想確定Backbone符號是被定義的,你應該聲明它是一個依賴項。

一些libs自己註冊爲AMD模塊和全局變量(通常jQuery會這樣做)。 Backbone不直接支持AMD,無論其使用方式如何,都在全球範圍內進行註冊。從理論上講,你不能將它聲明爲依賴項,但是你有這樣的風險,即需要在加載主幹之前嘗試加載腳本,在這種情況下骨幹符號將不會被定義。

如果您重申聲明除附加字符之外的依賴關係(即附加腳本大小),則無關緊要。

+0

我在問我是什麼原因當我使用r.js我需要刪除這些依賴關係導致它將在每個模塊內部生成它們 – chchrist

+0

你確定你正在使用它對 ?這聽起來像你優化js文件,而不是整個項目http://requirejs.org/docs/optimization.html#wholeproject – Jean

0

您可以省略任何未使用的要求。

在你的例子(忽略省略代碼!),你可以刪除jqueryundescore(原文如此),但不backbone(因爲你通過Backbone.View.extend使用它)。

顯然你需要保持你的需求名稱和變量同步。

+0

我仍然使用,但不會把它們作爲變量從父視圖? – chchrist

+0

除非你有一個非常奇怪的文件結構,你沒有向我們顯示,否。 – stusmith