MeteorJS:模板助手更新后的回调

Posted

技术标签:

【中文标题】MeteorJS:模板助手更新后的回调【英文标题】:MeteorJS: Callback after template helper was updated 【发布时间】:2015-08-23 10:24:08 【问题描述】:

我是 Meteor.js 的新手,所以希望这是我的无能,而不是平台的限制,因为否则它非常棒。

我想要实现的目标非常简单:每当模板助手使用新数据(但不是来自数据库!)更新时运行 javascript

一个简单的示例场景可能是这样的:用户发出请求以获取一些图像。但是,图像不应只是“弹出”,而应在完全加载后隐藏并淡入(以及定位它们等)。

换句话说,在助手接收到新数据之后,应该立即运行一个函数来处理该数据(在实际呈现之前无法在服务器上完成)。

如果数据来自集合,通过订阅回调很容易实现。

但是,一旦助手渲染了新数据,似乎没有回调。

是的,可以添加几毫秒的超时,但在我看来这不是一个干净或可靠的解决方案,因为您显然永远不知道它需要渲染多长时间。

我已经搜索了几十个看似相关的帖子,但找不到任何可以被视为实现此目标的“标准”方式...

这里有一些(简化的)示例代码来说明这个场景:

var images = [];


//When showImages is updated with new data from the images array...
Template.gallery.helpers(

    showImages: function () 
        return images;
    
);

//...this function should fire
function doMagicWork () 
    ...



//Because firing it on the on click event would be too soon,
//as the helper hasn't rendered yet
Template.gallery.events(

    "click #fetch_images": function (event) 

        Meteor.call("getImagesFromServer", function(error, result) 

            images = result.content;

        );
    
);

【问题讨论】:

【参考方案1】:

有一项待定功能可以为 UI 更改添加动画/过渡支持 (referenced here)

作为临时解决方案,您可以使用 Blaze UI 挂钩。有相当多的软件包使用它们。例如here 和here

一般来说,Meteor的方式是减少样板代码量。平滑过渡是一种模式,而不是元素的个别事物,应该按照流星哲学来对待。

【讨论】:

谢谢@Adnan Y,我接受了你的回答,因为 Meteor UI Hooks 正是我所需要的;更新后触发功能的一种方式。我试过了,效果很好:)! Momentum 看起来也非常有用,但通常它不仅仅是添加动画的问题。例如,在这种情况下,我想按大小过滤和排序图像,这在服务器端是不可能的,因为它们来自外部源。

以上是关于MeteorJS:模板助手更新后的回调的主要内容,如果未能解决你的问题,请参考以下文章

MeteorJS:在弹出窗口中不会触发模板事件

更新 Visual Studio 2017,现在出现编译错误 C7510:“回调”:使用依赖模板名称必须以“模板”为前缀

微信公众号模板消息开发小结

全局助手正在覆盖流星车把模板中的本地上下文

Meteor js:使用#each 来迭代和渲染博客的多个 html 文件中的模板

Meteor 模板和模板助手