2014-03-31 92 views
0

我有這個問題,即rendered函數被調用,而元素還沒有在DOM中。讓我描述一下我的情況。模板看起來是這樣的:流星:wainOn(鐵路線)不工作

<template name="barfoo"> 
    <ol> 
     {{#each bars}} 
      <li item>{{title}}</li> 
     {{/each}} 
    </ol> 
</template> 

而下面的javascript代碼

Template.barfoo.bars = function() { 
    return Bars.find({}); 
}; 

Tempalate.barfoo.rendered = function() { 
    var bars = Bars.find({}).fetch(); 
    var list = $('[items]'); 
}; 

rendered函數被調用bars == list == []。 因此,要解決這個問題,我實現Iron routes這樣

Bars = new Meteor.Collection('bars'); 

// Routes 
Router.configure({ 
    layout: 'layout', 
    loadingTemplate: 'loading', 
    notFoundTemplate: 'notFound'  
}); 
Router.map(function() { 
    this.route('/', { 
     controller: 'BarsController', 
    }); 
}); 

if (Meteor.isClient) { 
    App = { 
     subs: { 
      bars: Meteor.subscribe('bars'), 
      ... 
     } 
    }; 

    MainController = RouteController.extend({ 
     template: 'barfoo', 
     before: function() { ... }, 
     waitOn: function() { 
      return [App.subs.bars]; 
     } 
    }); 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
     Meteor.publish('bars', function() { 
      return Bars.find({}); 
    }); 
} 

所有的基礎知識,但是當我現在就去爲localhost:3000我仍然在rendered功能空列表獲取。任何建議有什麼問題在這裏?

回答

1

我假設你正在使用最新版本的iron-router。如果是這樣的話,你還需要loading鉤添加到您的路由器,所以:

Router.onBeforeAction('loading'); 

同時請注意,棄用before鉤標。

+0

我需要深入瞭解這一點,但你是對的。我無法複製 - 直接通過'onBeforeAction'進入我的項目(遇到lookupHook錯誤或某事),但我確實添加了[action](https://github.com/EventedMind/iron-router)方法我的控制器做到了!日Thnx! –