使用Garber方法执行DOM:
SITENAME = {
common: {
init: function() {
// application-wide code
}
},
users: {
init: function() {
// controller-wide code
},
show: function() {
// action-specific code
}
}
};
UTIL = {
exec: function( controller, action ) {
var ns = SITENAME,
action = ( action === undefined ) ? "init" : action;
if ( controller !== "" && ns[controller] && typeof ns[controller][action] == "function" ) {
ns[controller][action]();
}
},
init: function() {
var body = document.body,
controller = body.getAttribute( "data-controller" ),
action = body.getAttribute( "data-action" );
UTIL.exec( "common" );
UTIL.exec( controller );
UTIL.exec( controller, action );
}
};
$( document ).ready( UTIL.init );
我如何在单独的.coffee文件中使用此技术ala Rails管道?
我想做以下
users.js.coffeee
SITENAME =
users:
init: ->
alert("nope")
index: ->
alert("hi")
但如果我现在这样做,它只会重写它并强迫我将它全部保存在一个文件中。
如何将其拆分并在此技术中为每个页面使用命名空间?
答案 0 :(得分:0)
首先,确保将其包含在application.js清单文件中:
//= require global
//= require users
global.coffee包含您的实用程序方法。您的示例users.coffee看起来很好。但是,您需要将SITENAME范围限定为window
,以便可以全面访问。
// global.coffee
window.SITENAME = ...
// users.coffee
window.SITENAME.users = ...
你需要这样做,因为CoffeeScript会在它自己的闭包中编译每个文件......从而限制范围,除非你明确地将它分配给窗口。
(function() {
window.SITENAME.users = {};
}).call(this);