2016-05-19 33 views
0

我有一個virtualList模板,我想用其他數據重複使用(virtList.items)。我怎樣才能將它抽象爲數據,即使它更像一個模塊?Meteor.js重複使用不同數據的模板

virtList.js:

// imports {..}; 

const virtList = {}; 

Template.virtualList.onCreated(() => { 

    virtList.items = getItems(); 
    virtList.itemsAmount = virtList.items.length; 
    virtList.itemHeight = 40; 
    Session.set("startIndex", 0); 
    Session.set("endIndex", 0); 
}); 

Template.virtualList.onRendered(() => { 

    virtList.containerHeight = $('.list__container').height(); 
    virtList.scrollerHeight = virtList.itemsAmount * virtList.itemHeight; 
    Session.set("endIndex", virtList.containerHeight/virtList.itemHeight); 

    $('.list__scroller').css({ 
     'height': virtList.scrollerHeight 
    }); 
}); 

Template.virtualList.helpers({ 
    items:() => visibleItems(Session.get("startIndex"), Session.get("endIndex")), 
}); 

Template.virtualList.events({ 
    "scroll .list__container" (event, template) { 

     const target = event.target; 

     virtList.scrollOffset = $(target).scrollTop(); 
     virtList.startOffset =() => Math.abs(virtList.scrollOffset/virtList.itemHeight); 
     virtList.endOffset =() => Math.abs(virtList.scrollOffset + virtList.containerHeight)/virtList.itemHeight; 
     virtList.startIndex =() => Math.floor(virtList.startOffset()); 
     virtList.endIndex =() => Math.ceil(virtList.endOffset()); 

     Session.set("startIndex", virtList.startIndex()); 
     Session.set("endIndex", virtList.endIndex()); 
    } 
}); 

const visibleItems = (startIndex, endIndex) => virtList.items.slice(startIndex, endIndex).map((element, i) => { 
    let index = i + startIndex; 
    let top = (virtList.itemHeight * index); 
    return { 
     name: element.name, 
     style: top, 
    }; 
}); 
+0

您可以在需要的地方重複使用該模板。您可以在重新使用模板時使用['#with'](http://guide.meteor.com/blaze.html#builtin-block-helpers)更改數據上下文。 –

+0

我認爲我的問題是我在'virtList.js'中亂七八糟。也許你可以幫助我更好地組織我的代碼?爲了能夠使用'#with'助手來使用它。 – Edgar

回答

1

看看官方文檔。您可以將數據上下文與模板一起傳遞。

Meteor Docs for template data context

+0

提供示例和說明將有助於OP,而不僅僅是指向doc文件的鏈接。 –

+0

如果我確信數據上下文,我會做一個示例代碼。 'getItems()'函數來自哪裏。這就是爲什麼只是指向指南。 –

+0

getItems()只是返回包含N個對象的數組的AJAX調用。 – Edgar