2015-03-03 76 views
1

我有這個在我的dashboard.htmlMeteor js中的Iron控制器無法訪問this._id。如何獲得ID?

{{#each todos}} 
    <li class="list-group-item"> 
     {{ task }} 
     <button class="delete"> Delete</button> 
    </li> 
{{/each}} 

,並在控制器dashboard.js我有這個

DashboardController.events({ 
    'click .delete': function() { 
    Meteor.call('ToDos.delete',this._id); 
    } 
}); 

無鐵控制器我可以訪問集合的ID使用this._id的事件,但在此設置它有一個空值。任何想法如何獲得在控制器收集待辦事項的ID?

+0

你用'this.data();'得到了什麼? – Ethaan 2015-03-03 02:14:37

+0

@Ethaan我得到了這個值Object {todos:LocalCollection.Cursor}。我嘗試了this.data()。id,this.data()._ id,this.todos._id,this.todos.id其全部未定義。有任何想法嗎? – 2015-03-03 02:30:37

+0

嘗試使用this.data()。todos你應該知道你是從Iron路由而不是從模板實例加入數據,例如試着用console.log(this.params) – Ethaan 2015-03-03 02:32:32

回答

1

請按照下列步驟操作。

DashboardController = RouteController.extend({ 
    template: 'layout', 
    data: function() { return SomeCollection.findOne(); }, 
    waitOn: function() { return Meteor.subscribe('someCollection') } 
}); 

DashboardController.events({ 
    'click .delete': function() { 
    console.log(this.data()) 
    console.log(this.data()._id)//not sure if this works. 
    Meteor.call('ToDos.delete',this.data()); 
    } 
}); 

這裏關鍵的,我們不需要{{#each}},你應該使用數據功能來填充數據的模板。

如果你這樣做,它將工作。

Template.example.events({ 
'click .delete': function() { 
     console.log(this.data()) //undefined 
     console.log(this._id)//id 
     Meteor.call('ToDos.delete',this._id); 
     } 
}) 
+0

感謝我們的回答。當你說我們不需要{{#each}}我的dashboard.html將如何顯示? – 2015-03-03 02:48:53

+0

看看你有什麼'{{#each todos}}做它獲得一些'集合'的簡單光標?正確?一些'collection.find();''''你也可以用'data:function(){return collection.find()}來做同樣的事情,所以todos不需要它,而'this.data() '會返回數據的實際上下文(對不起超級壞英語) – Ethaan 2015-03-03 02:53:49

+0

謝謝!我明白你的觀點 – 2015-03-03 02:55:11