1

我想使用 derbyjs 建立一个网站。该网站有文章。

每篇文章都有title(短文本)和text(大量文本)字段。

页面/articles是我可以看到所有文章标题的页面。

单击文章打开/articles/<article_id>,我可以在其中看到text单击的文章。

在通常的服务器端框架中,客户端只会获得 html。它既好又简单。但是在德比中,据我了解,我们分别获取数据和 html,然后将数据推送到客户端上的 html。

所以,我的问题:

1)如何/articles只加载titles,而不是texts文章?(换句话说,只加载我们当前页面需要的数据,不再加载)

2)当我点击某篇文章时,html会立即改变,对吗?但点击文章的文本不会立即加载(因为之前没有加载)。那么客户应该看到什么?将填充文本的空白页,何时加载文章的数据?

4

1 回答 1

2

1) 由于目前 ShareJS 的实现,至少只能订阅(获取)整个文档。这意味着您不能仅从title文章中获取服务器。解决方法:

  • 您可以在 Express 路由器中创建方法,该方法将返回id+列表title。您可以从客户端发出 XMLHttpRequest 请求(像往常一样)以获取它并放入客户端模型。
  • 您可以拆分集合。第一个titles,第二个texts
  • 也许还有更多

2) 在这个例子中,只有在文章加载到客户端后,html 才会开始渲染:

app.get('/articles/:id', function(page, model, params, next) {
  // let's load the article
  model.subscribe('/articles/' + params.id, function(err) {
    // article is loaded now let's start to render html
    page.render('article');
  });
});

在此示例中,html 将在文章加载之前开始渲染,并且在文章加载后 html 将填充数据(如果您在模板中使用 {} 而不是 {{}}):

app.get('/articles/:id', function(page, model, params, next) {
  // let's load the article
  model.subscribe('/articles/' + params.id, function(err) {
    // article is loaded and html is filled with data
  });
  // Still no article, let's render page without data
  page.render('article');
});
于 2013-12-19T01:58:50.247 回答