2012-12-07 35 views
3

我正在开发一个应用程序,使用骨干,下划线和jquerymobile。继jqmobile的方式,我有它加载在特殊div s个标签每一个访问的页面,与属性data-role="page"标记索引页。对于每个页面,我都有其相应的样式文件(或嵌入在style html标签中的代码片段)。我的问题是我的风格东西的名字开始碰撞。其他的事情是,我不喜欢为每个页面加载不必要的样式文件。是否有任何方式动态导入当前页面所需的CSS?这样做的如何动态导入CSS的骨干?

回答

6

我完成正是你问什么用RequireJSRequireCSS插件。

这里是我的观点一个片段:7

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'views/company/form', 
    'text!templates/company/company.html', 
    'css!../../../css/company/company', 
], function($, _, Backbone, Form, pageTemplate) { 

    var Page = Backbone.View.extend({ 
    ... 
    }); 

    return Page; 

}); 

线,'css!../../../css/company/company'是在CSS文件成为加载此观点的要求。

一旦company.css样式表被加载,它在浏览器中,即使其他的“页面”负载,因为没有实际的页面刷新。因此,我有我的主要页面访问量切换<html>元素类:

// remove any old route-* classes existing on the html element 
$('html').removeClassRegEx(/^route-.*/); 
// add in the company's top-level class name 
$('html').addClass('route-company'); 

而对于company页我所有的特定页面的样式被限定在.route-company类。

您可以找到jQuery plugin removeClassRegEx here

0

一种方法是使用jQuery的(你90%已经与骨干网使用),其loadget AJAX功能,或什么的,加上回调。

然后,如果需要,您可以从骨干应用程序调用这些函数,并将该css内的<style>标签简单地插入到文档中作为模板。

或者我觉得也有专门的jQuery函数。

我能想到这样做会与require.js的,它的插件另一种方式(它有text插件,我相信,这也将让你加载你的JavaScript模板)。