如何访问路径中的Emberjs模型数据

时间:2014-04-14 14:25:16

标签: javascript ember.js

我想在路由或控制器中访问所有数据(例如Message valueauthor属性),对它们执行某些操作,然后将它们存储到一个HTML localStorage。但是,到目前为止我看到的所有示例都使用each controller来访问Handlebars上的每个模型数据。以下是我的伪实现。

App.MessagesRoute = Ember.Route.extend({
  setupController: function(controller, model) {

    messages = this.get('store').find('message') 
    //^This returns a PromiseArray but I can't seem to access the actual values.
    //I also tried messages.forEach but it doesn't seem to work

    //...
    //...

    //Below is what I'd like to do, to push the messages into the localStorage
    //Therefore I'd like `messages` to be an array
    for (var i=0; i<messages.length; i++)
      localStorage.setItem('messages', JSON.stringify(messages[i]))
  }
});

我知道我在这里错过了一些简单的东西。但我在文档中找不到它。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你只需要等待promise数组完成,然后像这样迭代它:

App.MessagesRoute = Ember.Route.extend({
  setupController: function(controller, model) {

    messages = this.get('store').find('message') 

    messages.then(function() {
       messages.forEach(function(message) {
          // do what ya like
       });
    });
});

请参阅PromiseArray docsforEach docs

答案 1 :(得分:1)

Ember方式是首先在你的路线中设置模型,Ember只会在promise解决后调用setupController(即在获取模型后)。

App.MessagesRoute = Ember.Route.extend({
  model: function() {
    return this.get('store').find('message');
  },
  setupController: function(controller, model) {
    model.forEach(function(msg) {
      // save message to localStorage here
    });
  }
});