Spoke——可重用的前端组件

spoke的Python项目详细描述


spoke为构建可重用的前端组件提供了一个框架。

安装

分支项目位于github,可通过pip访问。

从pip

安装v0.2
sudo pip install spoke==0.2

从源安装v0.2

curl https://github.com/axialmarket/spoke/archive/version_0.2.tar.gz | tar vzxf -
cd spoke
sudo python setup.py install

什么是发言权?

spoke是一个可执行的javascript文件,可以包含javascript、css和html模板。此外,一个spoke可以依赖于其他spoke,这允许我们将前端组件划分为小的离散块,并在构建时为一个页面创建一个可加载的javascript文件,该页面只包含我们需要的功能。现在,您可能想知道我们如何将css和html模板嵌入到可执行的javascript文件中。我们使用的方法有些简单;我们将css或html内容编码成一个字符串,并将其嵌入到一些简单的javascript中,该javascript对内容进行解码并将其动态添加到dom中。

一个简单的例子

让我们创建一个用于呈现用户名的分支。这听起来像是一个太简单的任务,但是可能需要一些复杂的逻辑:

  • 为了节省空间,如果用户的全名超过20个字符,我们将只呈现他们的首字母和姓氏。
  • 如果用户是内部用户,我们希望用(内部)注释他们的名称。
  • 如果用户是伪装成普通用户的内部用户,我们希望用(masq)注释他们的名称。

对于本例,我们将使用主干模型和视图以及下划线模板,但这些是实现选择,而不是仅仅因为我们正在创建spoke就强加给我们。

下面是我们将使用的主干模型:

var UsernameModel = Backbone.Model.extend({
    defaults: { first_name: "",
     last_name: "",
     is_internal: false,
                    is_masq: false }
});

视图非常直观:

var UsernameView = Backbone.View.extend({
    className: 'username',
    render: function() {
        this.$el.html(this.template(this.model.attributes));
        return this;
    },
    template: _.template($('#username-template').html())
});

我们将下划线模板存储在带有“text/template”类型的标记中:

<script id="username-template" type="text/template">
    <% if (first_name.length + last_name.length >= 20) { %>
        <%= first_name.substr(0,1) %>.
    <% } else { %>
        <%= first_name %>
    <% } >
    <%= last_name %>
    <% if (is_internal) { %>(internal)<% } %>
<% else if (is_masq) { %>(masq)<% } %>
</script>

此外,我们还有一个css文件来控制用户名的样式:

.username {
    font-size: 18px;
    color: #333;
        white-space: nowrap;
}

要将其转换为分支,我们只需将这些源文件存储在分支源树中,该树位于/var/spoke/:

js/models/Username.js
js/views/Username.js
html/username.html.tpl
css/username.css

然后,我们将这个spoke的定义(我们将称之为“惊喜”、“惊喜”、“用户名”)添加到spoke配置中,并将其添加到/etc/spoke/:

# /etc/spoke/username.cfg
[username]
js     = [ 'models/Username.js', 'views/Username.js' ]
html   = 'username.html.tpl'
css    = 'username.css'
spokes = 'backbone'

spoke不需要拥有所有这些类型的文件;spoke可能只包含css或javascript内容。另外,请注意,我们已经使“username”发言依赖于“backbone”发言。“主干”辐条的定义依次引用“下划线”辐条。当我们使用spokec生成spoke时,这些依赖项将被跟踪并包含在输出中。如您所料,如果一个spoke被多次引用,那么它只包含在输出中一次。

既然我们已经定义了这个spoke,下面我们将调用spokec来生成它:

spokec username [add'l spokes] -o path/to/output.js

每次调用spokec都会生成一个可执行的javascript文件,其中包含所有指定的spoke及其依赖项。因此,通常一个服务会为其所有页面创建一个单分支文件,如果服务提供的页面明显不同,则有时会创建几个不同的分支文件。

如需更多帮助

spokec --help

许可证

bsd 3子句,请参见LICENSE.txt

作者

本·霍尔兹曼<;ben.holzman@axial.net>;
马修故事<;matt.story@axial.net>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用Java获取“特定id XML数据”   用于在GET方法中筛选对象的java可选属性   简单的Java文件传输程序问题   JavaSpringMVC无法显示静态资源   java如何在javadoc示例中编写块注释?   java My程序在MergeSort数组中不能正确计数反转   Java Mail API电子邮件未按相反顺序显示   Java FX示例在NetBeans中打开时抛出错误   java递归在游戏配置单元中搜索蜘蛛实现的一个分支后停止   java selenium webdriver行为:是挂起还是什么?   JAVAawt。机器人鼠标垫没有任何效果   java试图让用户按enter键生成下一个素数   java在Android SQLite应用程序中没有这样的表,有2个表   java Elasticsearch RestClient连接由对等方重置   java如何设置log4j2 asyncQueueFullPolicy   elasticsearch java中的elasticsearch查询,用于检索特定字段中具有最少值的所有文档   java如何使用where子句从firestore中的集合中获取数据?   检测文件更改的java Eclipse侦听器?