2015-04-01 76 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的值,助手的結果將失效,第二個模板將更新。