【问题标题】:Add Jade blocks of content in the client-side with jQuery使用 jQuery 在客户端添加 Jade 内容块
【发布时间】:2012-09-05 15:22:47
【问题描述】:

我有一些在页面加载时从 Jade 加载的内容(例如,连接的用户列表)。此内容是动态的,客户端通过 socket.io 消息通知其更改。客户端中的 jQuery 脚本必须添加新内容或删除旧内容。

问题是新内容可能非常复杂(例如,用户的所有信息),我必须在客户端脚本中重写 HTML 代码(而 jQuery 不是为此而设计的)。

我尝试克隆和编辑现有结构(可以隐藏),但我认为这不是最好的方法。

示例

服务器端

#usersList
    each user in users
        .userBox
            .userName #{user.name}
            .userCountry #{user.country}
            .userMail #{user.mail}

客户端

websocket.on('newUser', function(user) {
    $('<div class="userBox">'+
        '<div class="userName">' + user.name +'</div>'+
        '<div class="userCountry">' + user.country +'</div>'+
        '<div class="userMail">' + user.mail +'</div>'+
    '</div>').appendTo($('#usersList'));
});

客户端代码很糟糕。我想知道我是否可以在 Jade 中有一个内容块并执行此操作。

websocket.on('newUser', function(user) {
    $(jade.userBox(user)).apprendTo('#usersList');
});

如果不可能,最好的方法是什么?

【问题讨论】:

标签: jquery node.js express socket.io pug


【解决方案1】:

我不会使用jade来呈现用户,因为我有两种插入用户的方法,一种用于加载页面,另一种用于更新。这对于处理用户的类来说太复杂了。所以我只是使用jade来创建页面模板(占位符)并将数据获取到客户端。

var local_data ={}
local_data.users =!{JSON.stringify(usersList)}
div#users(class="ui-bar ui-bar-h")

js:

users.add(data);

users.add() 实际上将用户数据和选项存储在一个数组中,并使用 jquery 进行一些 DOM 操作

这可以在加载和无缝更新时使用

【讨论】:

  • 那么您将只使用 Jade 来创建用户包装器而只使用 jQuery 来管理用户 DOM?这是一个好方法,但使用 jQuery 创建新内容是一场噩梦。你现在有用于创建 DOM 的 jQuery 插件吗?
  • jquery 操作需要一些时间来适应,但学习曲线相当快。
  • 我最终选择了这个轻量级的 jQuery 插件来创建新的 DOM 元素:github.com/fgnass/mkay。它的语法类似于 Jade。
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2015-04-08
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多