我使用Backbone.js和Handlebars.js(使用Underscore.js和jQuery作爲Backbone的依賴關係)創建Web應用程序。我使用requirejs爲應用程序加載模塊。我該如何解決Handlebars.js缺少noConflict方法的問題?
繼此份說明:
http://requirejs.org/docs/jquery.html#noconflictmap
這裏:
http://requirejs.org/docs/api.html#config
所以我requirejs的配置是這樣的:
map: {
'*' : { 'jquery': 'jquery-private' },
'jquery-private': { 'jquery': 'jquery' }
},
shim: {
'underscore' : {
exports: '_',
init: function() { return this._.noConflict(); }
},
'backbone' : {
deps: ['underscore', 'jquery'],
exports: 'Backbone',
init: function(_, $) {
// need to manually set Backbone.$ since it looks for it on the global object
this.Backbone.$ = $;
return this.Backbone.noConflict();
}
},
'handlebars' : { exports: 'Handlebars' }
}
我加載本地副本我的依賴在主幹,下劃線和jquery上調用noConflict()
來拒絕。但是,把手沒有noConflict
方法;如果我試圖以同樣的方式配置墊片它作爲骨幹&下劃線,我得到一個錯誤:
Uncaught TypeError: Object #<c> has no method 'noConflict'
沒有真正有驚喜,但我很擔心衝突!有沒有解決方法?我可以通過編寫我自己版本的Handlebars noConflict
手動實現相同的目標嗎?那將是什麼樣子?
這似乎是在正確的軌道上,但是在Backbone中'noConflict'並不只是將全局'Backbone'設置爲'undefined'。相反,如果在初始化模塊之前定義了* Backbone,它會將全局'Backbone'恢復到之前的值。這個想法是,如果你嵌入在你不能控制的頁面中,你不想覆蓋該頁面上可能已經存在的任何版本的Backbone。 – gregates