2014-01-08 58 views
5

在幾乎所有的骨幹/ Require.js項目,你會看到模型和視圖,類似於此:爲什麼包括jQuery和在每個骨幹JS文件強調/ Require.js項目

define([ 
    'jquery', 
    'underscore', 
    'backbone' 
], function ($, _, Backbone) { 
    //Some code goes here, perhaps a Backbone model or view 
}); 

但是,假設您需要正確設置您的Require.js墊片(使用主幹墊片包括deps: ["underscore", "jquery"]),您只需要定義Backbone - 定義Backbone作爲依賴關係,隱式地將jQuery和Underscore定義爲依賴關係!因此,這也將是正確的:

define([ 
    'backbone' 
], function (Backbone) { 
    //Some code goes here, perhaps a Backbone model or view 
}); 

就個人而言,我會明確地使用其功能的文件中定義的jQuery或下劃線 - 但在像一個簡單的無裝飾的骨幹模型文件,他們似乎是多餘的內容。

爲什麼我經常看到多餘的jQuery和Underscore定義的模式?爲什麼這會成爲一個毫無疑問的最佳實踐?

+0

如果你想使用你在另一個項目中定義的模塊,該怎麼辦? – kinakuta

+0

你回答了你的問題:*就我個人而言,我將在一個明確使用它們的函數的文件中定義jQuery或Underscore - 但是像一個簡單的沒有裝飾的Backbone模型文件,它們**是cruft。* – nikoshr

回答

2

聲明下劃線和jQuery作爲依賴項,當你沒有明確需要它們時,模塊中的變量不起任何作用(即它不是最佳實踐)。當你在你的問題說

就個人而言,我會在 明確使用其功能的文件中定義的jQuery或下劃線 - 但在像一個簡單的 沒有廉價的骨幹模型文件,他們似乎是多餘的內容。

而且,您甚至可以在某些情況下,他們擺脫:

1

這樣做只是因爲避免使用全局變量。當然,您可以跳過定義jQuery和下劃線,但$_將引用這種情況下的全局變量。如果您創建自己的應用程序並使用單一版本的jQuery - 它不會遇到問題,但是如果您的應用程序已包含幾個不同的庫版本 - 最好遵循您不喜歡遵循的練習:)