【问题标题】:Ember Nested Route and PromisesEmber 嵌套路由和 Promise
【发布时间】:2014-09-10 23:32:20
【问题描述】:

我有一个这样定义的 jquery ajax 调用

var fetchMessages = function(){$.getJSON(<some url>).then(function(data){ return data; }};

var messages = fecthMessages();

我的路线是这样设置的

App.Router.map(function() {

    this.resource('messages', function() {
      this.resource('message', { path: ':message_id' });                       
    });                                                                        
  });

我在这样的路线中使用了messages 的承诺

App.MessagesRoute = Ember.Route.extend({
    model : function(){
        return messages;
    }
});

上述路线运行良好。

接下来我有一个嵌套路由,如下所示。但是,当我直接尝试访问 #/messages/&lt;id of the message&gt; 时,这会出错。加载 #/messages 然后访问 #/messages/&lt;id of message&gt; 工作正常。

App.MessageRoute = Ember.Route.extend({
    model: function(params) {
      message = messages.findBy("id", params.message_id);
      return message;

    }
  });

那么如何处理嵌套路由中的承诺?

【问题讨论】:

  • fetchMessages 不是函数,您不能执行它。 |那么 ember 可以处理从model() 返回的承诺吗? | findBy 定义在哪里?
  • 抱歉,已编辑。 fetchMessages 是一个函数。 findBy 是 Ember 的东西。我基于这个示例代码 - github.com/tildeio/bloggr-client/blob/master/js/app.js
  • .then(function(data){ return data; } 的目的是剥离textStatusjqXhr 参数?
  • 不。它进行了一些我为简单起见跳过的数据操作。

标签: javascript jquery ember.js promise


【解决方案1】:

那么如何处理嵌套路由中的承诺?

显然是Ember handles these for you

但是当我直接尝试访问 #/messages/ 时会出错:

App.MessageRoute = Ember.Route.extend({
    model: function(params) {
      message = messages.findBy("id", params.message_id);
      return message;

    }
  });

messages 仍然是一个承诺,而不是一个数组;它没有findBy 方法。相反,使用

return messsages.then(function(m) {
  return m.findBy("id", params.message_id);
});

【讨论】:

  • 谢谢!我仍然有一个问题,即我的依赖于这个承诺/模型并使用 this.get('context').model 的视图在呈现视图时是未定义的。知道我如何让视图与承诺一起工作吗?
  • 嗯,抱歉,我对 Ember 没有太多经验。
猜你喜欢
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2016-01-10
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多