2013-12-18 29 views
1

我想使用derbyjs構建一個網站。該網站有文章。derbyjs數據發送理解

每篇文章有title(短文本)和text(很多文本)字段。

頁面/articles是一個頁面,我可以看到所有文章的標題。

點擊文章打開/articles/<article_id>我可以看到點擊文章的text

在通常的服務器端框架中,客戶端只會獲得html。這很好,很簡單。 但在德比,據我所知,我們分別獲取數據和HTML,然後將數據推送到客戶端的HTML。

所以,我的問題:

1)如何使/articles負荷只有titles,但不是文章texts? (換句話說,只加載我們當前頁面所需的數據,不再更多)

2)當我點擊一些文章時,html立即更改,對嗎?但是點擊文章的文本不會立即加載(因爲它之前沒有加載)。那麼客戶應該看到什麼?當文章的數據將被加載時,將填充文本的空白頁面?

回答

2

1)由於目前實施的ShareJS只能訂閱(取)至少整個文檔。這意味着你無法從文章的服務器title中獲得。 解決方法:

  • 你可以在快速路由器的方法,這將返回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'); 
}); 
+0

非常感謝。現在我已經掌握了它,併成爲了解範例。 還有一個問題。我閱讀過文檔,我們可以在德比應用程序中創建通常的快遞路線。那麼,這條路線只會在服務器上渲染?它會解決問題#1嗎? – imkost

+0

快速路由僅在服務器上執行。正如我寫的,你可以用它們來解決問題1。 –

+0

我的意思是不僅返回id + title的列表,而且整個呈現的頁面 – imkost