2016-05-17 89 views
0

在我的项目中,其中一个模板有onRendered方法超过250行。代码变得越来越不可读和不可维护的(其单片因为)我想分割的所有代码实现的功能是这样的:如何将代码拆分为流星模板中的函数

Template.Products.onRendered(function() { 
    initCarousels(); 
    const allProducts = Meteor.call('server/collections/products::getAll', product._id, (err, content) => { 
     ... 
    }); 

    const sortedProducts = sortProducts(allProducts); 
    updateCarousels(sortedProducts); 
    ... 
    this.autorun(() => { 
     this.subscribe('products'); 
     ... 
     if (this.subscriptionsReady()) { 
     ... 
     } 
    }); 
} 

当然,我可以在onRendered法定义的功能,但声明他们在onRendered和在同一个地方使用似乎不是完美的方式做到这一点 - 我正在寻找像从模板中移动功能,甚至将它们移动到另一个文件。你能否告诉我一种实现这个目标的方法?

+0

你使用什么版本的流星? – Calvin

+0

@Calvin流星1.3 – getupandgo

回答

2

是的!您可以将代码移动到lib/目录并使用它将会是兄弟的客户端服务器文件夹。

Template.registerHelpers(function_name, function()); 

当服务器启动时,它会首先加载的lib/*。JS文件按字母顺序,这样你就可以从客户端使用的文件。

+0

我想过了,但发现它过于矫枉过正,因为注册助手将在所有模板中可用,而不是一个;此外,我不需要用这个功能来更新视图 - 只是中间逻辑,它将在代码 – getupandgo

+0

中进一步使用。这只是在那里,可用于所有模板。这不会妨碍任何顺便说一句。它们只是功能。声明函数不会花费任何代价,而不会写入任何DRY代码。 –

+0

你说得对。我会尝试一下! – getupandgo

相关问题