2013-02-05 32 views
8

頁我希望在座的各位知道Pinterest的風格佈局,其行爲:你將如何建立Pinterest的喜歡與meteor.js

  • 我們有很多收集(假設1000)的產品頁面上
  • 加載我們顯示該集合的只有很少的子集(即20的第一批產品)
  • 當用戶滾動下來,到達頁面的底部,我們給予未來20個產品
  • 網頁是由許多客戶認爲,每個都有自己的一套顯示產品

獎勵任務:

  • 當產品收集得到新的項目,它們將顯示在頁面的頂部(如展示的產品列表第一項)

我想如何編程流星的方式。讓我們跳過用戶界面代碼,我只對業務邏輯感興趣。

我想ProductsDisplayed集合作爲幫手,裏面是空的,並通過20種產品在頁面加載填充,然後到達滾動點的時候,我插入20種產品更從原來的產品收集等

問題:

  • 如何讓客戶端之間不同ProductsDisplayed集合,
  • 如何要求從產品收集未來20種產品,並沒有得到以前的

但也許關於ProductsDisplayed的整個想法是錯誤的。我很想知道你在想什麼!

更新!
我改變了只使用Products集合的方法。

服務器:

Meteor.publish "productsDisplayed", (number) -> 
    Products.find {}, 
    limit: number 

客戶端:

Meteor.autosubscribe -> 
    Meteor.subscribe "productsDisplayed", Session.get('productsDisplayedNumber') 

和20屆 'productsDisplayedNumber' 遞增滾動點達到時。但是自動訂閱使得整個模板被重新渲染,而不僅僅是新的元素。 有什麼建議嗎?

+0

不錯的應用程序!很高興看到實際的Meteor應用程序! –

回答

5

我終於解決了這個問題。該解決方案是讓客戶端只收集,像:

# on client 
# client side only collection 
ProductsDisplayed = new Meteor.Collection(null) 

然後當達到滾動點要求服務器爲接下來的N(limitNo)產品

# on client 
Meteor.call 'getProducts', limitNo, skipNo, (err, products) => 

    _.each products, (item, index) => 
    # get rid of _id 
    delete item._id 

    ProductsDisplayed.insert(item) 

skipNo由N遞增,總是問爲下一組數據。並在服務器端我有:

# on server 
Meteor.methods 
    getProducts: (limitNo, skipNo) -> 

    productsCursor = Products.find({}, { 
     limit: limitNo, 
     skip: skipNo 
    }) 

    productsCursor.fetch() 

這流星的方法從我的產品集返回我的下一組產品。

當然視圖模板顯示器中ProductsDisplayed集的內容:

Template.products.products = -> 
    ProductsDisplayed.find {} 

所以,你有什麼感想?

+0

感謝您更新您自己的問題! – stereoscott