2014-11-25 90 views
8

我想在meteor.js應用程序中使用像這樣的jQuery。如何在流星1.0中使用jQuery

JS:

if (Meteor.isClient) {  
    Meteor.startup(function() { 
      $("button").click(function() { 
       $("p").toggle(); 
      }); 
      }); 
... 

或者沒有meteor.startup功能。兩者都不起作用。

HTML:

<button>Click</button> 
<p>Can you see me?</p> 

我沒有得到任何錯誤,當我按一下按鈕沒有任何反應。

回答

14

你不應該使用jQuery簡單的事件處理這樣的,用流星模板事件映射來代替:

HTML:

<template name="myTemplate"> 
    <button type="button">Click me !</button> 
    <p>Can you see me ?</p> 
</template> 

JS:

Template.myTemplate.events({ 
    "click button":function(event, template){ 
    template.$("p").toggle(); 
    } 
}); 
+0

感謝您的答覆!但是,爲什麼我的例子jQuery不工作?它應該,對吧? – Mika 2014-11-25 01:23:42

+0

Meteor完全控制DOM管理(這就是爲什麼它首先處理起來很容易,對嗎?),並且無法確保使用jQuery設置的事件將保留在模板重新呈現中,所以我假設這就是爲什麼您的代碼無論如何,堅持使用流星模板的東西,以避免陷阱。 – saimeunt 2014-11-25 01:44:43

+0

我想但我不確定它不起作用,因爲在啓動時沒有DOM元素,它可能與.rendered事件一起工作 – Sindis 2014-11-25 09:39:05

7

使用meteor list看如果jquery包已包含。
如果不是,請使用meteor add jquery添加包

+2

根據Meteor文檔和Athmosphere https://atmospherejs.com/meteor/jquery jquery應該被自動安裝。但是我看不到它列出。我安裝它,現在jQuery的作品。這些文件相當具有誤導性。 – Mika 2014-11-25 02:30:28

+0

我刪除了jquery,但代碼仍在工作。 – Mika 2014-11-25 02:38:51

+0

是的,即使沒有明確的軟件包安裝,jquery顯示「就在那裏」。 – xaxxon 2015-04-08 21:02:03

3

啓動時,您的HTML不可能被渲染。你想在你的模板化事件中做到這一點。

但是,和其他人一樣,你不想這樣做。

+0

這是一個正確的答案,但我是注意到雖然有些明顯地在isClient代碼中調用$而不是isServer塊是非常重要的。它默認包含在Meteor 1.0中,並且不會顯示在流星列表中。只要嘗試它,但在客戶端應該工作,除非您訪問模板依賴至少$(「身體」)應該在isClient中工作。 – MistereeDevlord 2015-04-20 10:11:03

1

嘗試使用標準的jQuery DOM ready函數你寫你的應用程序代碼之前如下...

if (Meteor.isClient) { 
    $(function() { 
     // your jQuery code here... 
    }); 
}