2014-09-19 71 views
0

與流星的IronRouter,我試圖用this.params反對其他地方,但困惑,它是什麼。它似乎是一個零長度數組,它實際上是一個具有命名方法的對象,位於路徑組件之後。什麼是鐵@params:路由器

# coffee 
@route 'magnets', 
    path: '/magnets/lesson/:lessonCname' 

    data: -> 
    if @ready() 
     debugger; 
     console.log("route.params", @params) 

與此代碼,在調試控制檯我會得到:

this.params 
[] 
this.params.lessonCname 
"despite-magnets-01" 
typeof(this.params) 
"object" 
this.params.length 
0 
this.ready() 

但在傳遞params對象到服務器的方法,該方法(即「lessonCname」)消失。

如果我的理解是正確的,那麼短期的問題是什麼是檢索/這些方法轉換成最佳的方式{屬性:值}這樣他們就可以被序列化並傳遞到服務器調用?

回答

0

有兩個簡單的解決你的問題的方式,您可以設置從數據範圍內的全局變量(但這被認爲是不好的做法,至少IMO),或者您可以使用「數據」功能,它返回當前模板的數據上下文:

data: -> 
     window._globalscopedata = @params.whatever  #setting global variable 
     return someCollection.findOne      #returns data context 
      _id: @params.whatever 

等待處理這條路的時候,我會在_globalscoredata在模板上下文中可用的任何可用PARAM和我的文檔。

0

附着到RouteController params屬性是具有以下屬性的對象:

  • 散列:所述URL的哈希值。
  • 查詢:包括代表查詢字符串的鍵/值對的對象。
  • 與他們的名字和實際值的網址片段的列表。

讓我們舉個例子,這條路線的定義:

// using iron:[email protected] new route definition 
Router.route("/posts/:slug"); 

而這個網址在瀏覽器地址欄中鍵入:/posts/first-post#comments?lang=en

我們可以使用控制檯來找出正是PARAMS會實際上包含:

> Router.current().params 

它將顯示這樣的結果:

Object { 
    hash: "comments", 
    slug: "first-post", 
    query: { 
    lang: "en" 
    } 
} 

這裏slug已經是params對象的屬性,它的值是「first-post」,這不是一個方法。

如果你想從這些PARAMS URL片段以鍵/值對的對象中提取,則可以使用下劃線omit

// getting rid of the hash and the query string 
var parameters=_.omit(this.params,["hash","query"]); 
0

看看the source code從路徑檢索參數。 params是一個數組,但可能具有命名屬性。遍歷一切,你可以使用for in循環:

for(var x in myArray){ 
    // Do something. 
} 

通過這種方式,你可以在一切複製到一個新的對象(有可能會創建一個副本更簡單的方法)。