charlysisto 的想法是正确的。
答案是使用 Sprockets & YUI Modules 作为视图/模型。
//*=require_self
//*=require view/file_a.js
//*=require model/file_a.js
//*=require view/file_b.js
//*=require model/file_b.js
YUI().use('app','app-view-file-a','app-view-file-b','app-model-file-a','app-model-file-b', function(Y) {
Y.FileApp = Y.Base.create('fileApp', Y.App, [], {
views: {
fileA: {type: 'FileAView'},
fileB: {type: 'FileBView'}
}
}, {
ATTRS: {
root: {value: '/'}
}
});
var app = new Y.FileApp({
contentSelector: '#pjax-content',
serverRouting: true,
transitions: true,
container: '#file-app',
viewContainer: '#file-app-views'
}).render().showContent('#pjax-content', {view: 'FileAView'});
});
在视图和模型文件中,您只需像创建普通 YUI3 模块一样创建它们:
YUI.add('app-view-file-a', function(Y) {
Y.namespace('FileAView');
FileAView = Y.Base.create('fileAView', Y.View, [], {
template: Y.Handlebars.compile(Y.one('#file-a-template').getHTML())
});
Y.FileAView = FileAView;
},'0.1.0',{requires:['node','handlebars'], skinnable:false});
一开始,我实际上让 File.read 在 JS 中工作。但是这种方法看起来很乱,在开发领域效果不佳。Rails 从来不知道要重新编译“父”js 文件,因为时间戳没有改变。如果您不使用 YUI,File.read 解决方案可能适合您——但我会寻找不同的解决方案。每次更改子模块时都必须输入新行并删除,这很烦人。