1

似乎我能找到的所有文档jsdom都是关于“抓取其他人的页面”以获取信息。我想使用jsdomnode-jquery更新用户所在的页面。我知道当我编写代码时,我可以有一个<script>链接到公共目录中的 JavaScript 文件的常规标记,但如果可能的话,我想学习如何从服务器上执行此操作。我真正想要的是允许多个用户连接到一个页面并在一个用户执行操作时为所有用户更新页面。例如,按钮 1 将背景变为黑色。按钮 2 将其变为红色,按钮 3 将其变为白色。如果我错了,请纠正我,但我认为通过<script>标签链接到 JavaScript 文件是不可能的。所以看着jsdom

jsdom.env({html: ???, src: jquery, done: callback });

好的,这是第 1 个问题。我不知道在这段代码中为 html 放什么来获取我的 DOM 对象,或者我能做什么。我的文件是用玉写的,所以我不能只从文件中加载它们。然后我开始想,也许我可以把这段代码放在我代码的路由部分,并从req变量中获取 html。所以我开始在我的路由代码中玩耍:

exports.index = function(){
  res.render('index', {title: 'MyTitle'});
};

我只想说,整个路由的事情已经让我大吃一惊了。我已经尝试res.render了第二次,但这不起作用。所以这导致了问题 2。即使我可以获取 DOM 对象并对其进行操作,我也不知道如何将它们推回客户端,因为再做一秒钟res.render是行不通的。更不用说这会破坏目的,因为如果我让它们重新渲染,我不妨将它们重定向到另一个页面。

我打算用它socket.io来处理用户连接,所以也许关键就在那里。也许我可以设置 asocket.on('button_click', function(){ ... });但我不知道在该函数中放置什么来处理 DOM 操作和更新 DOM,或者在客户端如何让按钮发出'button_click',因为客户端无法访问套接字。 io 变量。

因此,如果有人可以帮助我使用示例向我解释这些事情,那就太好了。我真的很想弄清楚这一切,我花了几天时间研究和阅读 node.js、express.js、socket.io、jsdom 和 node-jquery 的 API 文档。似乎我发现的所有示例对于他们自己的领域来说都是非常基础的,并且没有任何示例可以真正将它们联系在一起。

4

1 回答 1

2

你正朝着一个有点尴尬的方向前进。

首先,如果你用过jade,它会使用jade编译器编译成html。

其次,一旦你编译了它,你可以将它推入 jsdom,因为它使用了一个 html5 解析器,然后你可以通过普通的 DOM api 来操作它。

第三,您无法直接访问客户端浏览器中的 DOM。通常,人们实现共享同步视图之类的方法是使用 socket.io 并将数据事件向下传输到每个客户端,在那里您编写客户端 JavaScript 来解释这些事件并在 UI 中进行必要的更改。您正在发送一组引导每个客户端的 html 和 javascript - 人们很少将完整的 DOM 保存在服务器的内存中,然后尝试更新它并将更改广播到客户端。你可以这样做,我只是不推荐它。通常不是事物的结构。

第四,在第一次通过时执行此操作非常复杂。我建议查看客户端 mvc 框架比较应用程序,例如 todomvc - http://addyosmani.github.com/todomvc/。查看每个的来源,包括普通的旧 javascript 版本。这将教你足够的理解客户端部分。然后,您可以想象使用诸如 socket.io 之类的东西来更新您的模型并构建依赖于这些模型的更改事件的视图。您可以在没有 mvc 的情况下完成所有这些工作,但它会教您很好地分离关注点,从而了解人们通常如何构建这些类型的应用程序。

于 2012-10-03T05:33:06.423 回答