gpt4 book ai didi

javascript - 铁路由器,集合帮助器和 session 变量。如何在JavaScript函数中调用item属性

转载 作者:行者123 更新时间:2023-12-03 09:11:20 28 4
gpt4 key购买 nike

我正在开发Meteor应用程序,并试图将集合中的项目属性传递给javascript函数。在这种情况下,我使用instagram API的JavaScript插件instafeed.js进行工作,但我想从更基础的角度理解该过程。

我已经能够将Teams集合中的记录提取到/teams/:id route中,并使用{{name}}{{igHandle}}模板助手显示团队的属性。

使用此软件包etjana:instafeed和在线提供的demo,我还能够使instafeed.js正常工作。我要拉出的标签是通过以下方式静态分配的:Session.setDefault(‘tagName’,’football’);
最终,我想提取用户个人资料,但这需要来自oauth2的访问令牌。我认为可以通过{{$.Session.get access_token}} handlebar helper来实现,但是我需要先将变量输入instafeed.js函数。

有人可以说明如何将{{igHandle}}属性传递给javascript函数中的tagName。我的代码如下:

团队模板:

<template name="teamView">
<div class=“ui container”>
<h3>{{name}}</h3>
<p>
<i class="fa fa-instagram fa-lg"></i>
<a target="_blank" href="http://instagram.com/{{insta_hndl}}">&nbsp{{insta_hndl}}</a>
</p>
<br>
<h3>Instagrams</h3>
{{> igTeamFeed}}
</div>
</template>


一切正常,除了{{> igTeamFeed}}渲染。我可以显示内容,但是目前是静态的。 (通过 (Session.setDefault('tagValue','football')分配。

Instafeed模板:

<template name="igTeamFeed">
<div class="ui container”>
<h3>@{{insta_hndl}} Instagram</h3>
<div id="instafeed"></div>
</div>
</template>


内容在显示,但仅通过静态 (Session.setDefault('tagValue','football')代码显示。

路由器:

Router.route('/teams/:_id', {
name: 'teamView',
template: 'teamView',
data: function(){
var currentTeam = this.params._id;
return Teams.findOne({ _id: currentTeam });
},
action: function() {
if (this.ready()) {
this.render('teamView');
} else {
this.render('loading');
}
}
});


与模板助手一起使用,所以我认为我还可以。还要按照我的 prior posts之一的用户说明进行操作。

Instafeed Javascipt :(需要做一些工作)

Template.igTeamFeed.helpers ({
igData: function() {
return Session.get('insta_hndl');
},
});

Template.igTeamFeed.onRendered(function () {
//clear any previously stored data making the call
Session.get('insta_hndl'); //extra add-in
Session.set('insta_hndl', null);
Session.set('insta_hndl', this.data.insta_hndl); //extra add-in

var igHandle = this.data.insta_hndl;

});

Tracker.autorun(function(){
feed = new Instafeed({
get: 'tagged',
tagName: Session.get('insta_hndl'),
clientId: ‘xxxxxxxxxxxxxxxxxxx’,
resolution: 'thumbnail',
sortBy: 'most-liked',
limit: '15'
});

feed.run();
});



我有一个助手来获取会话的当前 insta_hndl。会话项通过url的 team/:_id标记传递,并在路由器中定义
onRendered清除旧的句柄,然后插入新的句柄。我添加了两个附加的 Session.getSession.set函数,因为遇到一个错误,指出 insta_hndl是未定义的(与上一篇文章的响应有所不同)。可能是错误的。
tracker.autorun函数是我使用instafeed示例的代码。应该在其他地方吗?也许在 helperonRendered函数中?我还需要 tracker.autorun来使用instafeed吗?据我了解,当 tagName更改时,它会动态更新提要,但是还没有其他方法吗?


怎么解决
这些是我认为可以解决此问题的方法。请提供有关如何执行此操作/您认为最佳做法的建议:


Collection Helpers:我以为我可以打电话给 Teams.findOne().insta_hndl之类的东西,但是运气不太好。那是使用的正确代码块吗?我必须在模板助手中定义一个变量,还是可以在feed js函数中直接调用它?
Handlebars Helpers:认为我可以使用Session助手进行某些操作,但是不确定如果一个用户打开了两个不同的instafeed实例(两个选项卡打开并选择了不同的团队)是否可以正常工作。
Reactive Methods:允许在Tracker.autorun内部同步调用方法。以为我读到一些说Meteor已经具有此功能的东西,但是请告知。
Iron Router Query:我的一部分仍然不相信insta_hndl没有通过。我已经探索过将instagram句柄作为查询参数添加到URL,但是认为这不是最佳实践。


如果有人可以帮助我完成这项工作,那真是太好了,但是解释会更好!确实为此花费了大量时间,并且许多在线资源都使用折旧的语法。

另外还有两个相关问题的问题:

我应该使用控制器吗?我应该单独写一个控制器吗?还是仅将其包含在 Router.route函数中?看到有些人严重依赖控制器,但是很多文档通过 Router.route来完成所有工作。

我应该将instafeed函数分解为 method吗?如果是这样,我该怎么做?我花了大量时间tryig将整个instafeed函数设置为服务器端方法,但似乎无法使其正常工作。我只预料自己会在其他一个或两个模板中使用此功能,因此我认为可以直接使用。请指教。

最佳答案

抱歉,这有点令人困惑。正确的javascript是:

Template.igTeamFeed.helpers ({
teams: function() {
return Teams.find();
}
});

Template.igTeamFeed.onCreated( function() {

var igHandle = Teams.findOne(Router.current().params._id).insta_hndl;

feed = new Instafeed({
get: 'tagged',
tagName: Session.get('insta_hndl'),
clientId: ‘xxxxxxxxxxxxxxxxxxx’,
resolution: 'thumbnail',
sortBy: 'most-liked',
limit: '15'
});

feed.run(); //run the new Instafeed({})
});


我不需要任何建议。可以使用Collection.findOne(Router.current()。params._id).attrib来获取该属性,其中Collection是您的集合,而attrib是您要获取的非_id值。

也不需要tracker.autorun,那也让我失望了。

关于javascript - 铁路由器,集合帮助器和 session 变量。如何在JavaScript函数中调用item属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32063805/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com