2015-04-01 78 views
0

我是流星和JS的新手。在流星如何在模板之间复制数据?

我创建了一个流星应用程序是这样的:

cd /tmp/ 
meteor create hello 
cd hello 

在hello.html的,我写这个

<body> 
    <h1>Welcome to Meteor!</h1> 

    {{> t1}} 
    {{> t2}} 
</body> 

然后我说这些模板:

<template name='t1'> 
<span id='t1'>hello</span> 
</template> 

<template name='t2'> 
<span id='t2'>world</span> 
</template> 

然后我写了语法hello.js内从DOM中获取文本:

Template.t1.onRendered(function() { 
    mytext = $('span#t1').html() }); 

根据我的浏览器调试器控制台, 上述语法工作好。

调试器告诉我,mytext的==“你好”

问:如何共享我的流星的应用程序的其他部分中MyText值?

正如所写,mytext被卡在我的匿名函数中。

例如我怎么会做这样的判断工作:

$('span#t2').html(mytext) 

+1

所以实际的问题不是_“如何提取HTML?”_因为你已经很容易做到了。更好的问题将是_“如何在Meteor应用程序的不同部分之间共享一个值?”。请相应确认并编辑。如果我是正确的,并且您正在问如何在Meteor App之间分享数值,就知道这个问题已经得到了很多答案(尝试搜索'Session')。 – 2015-04-01 10:49:00

+0

在流星会议的大小约束是什么?我在Google或文档中看不到任何答案。在其他Web框架中,会话应该保持较小。我假设jquery可以访问几MB的RAM。如果会话可以访问几MB的RAM,那么会话对我来说会很好。如果不这样做,也许我应该搜索Meteor API调用,当所有模板都呈现时,该调用会回调。在回调中,我会使用jquery与DOM进行交互。 – user3676943 2015-04-01 21:01:47

+0

再次请编辑您的问题。在目前的形式下,它似乎要求提取HTML,而实际上只是在应用程序中共享数据。 – 2015-04-02 10:24:30

回答

1

你会想要反应性地观察你的变量。一个简单的开箱即用的解决方案是使用Session variable。在你的第二个模板

Template.t1.onRendered(function() { 
    Session.set('mytext', $('span#t1').html()); 
}); 

然后,定义和返回变量引用助手:你可以做到这一点很容易,像这样

<!--html--> 
<template name='t2'> 
    <span id='t2'>{{getMyText}}</span> 
</template> 

//js 
Template.t2.helpers({ 
    getMyText: function() { return Session.get('mytext'); } 
}); 

会话变量是被动的,所以当第一个模板呈现并设置Session.mytext的值,助手的结果将失效,第二个模板将更新。