ember加载路由获取数据

时间:2013-10-20 08:58:15

标签: ember.js

是否有机会在获取数据时触发加载路由?

RM.Public.ItemsController = RM.ApplicationController.extend({
...snip...
  pageContent: ->
    @set 'newItems',
      RM.Blurb.find({search_conditions:@get('search_conditions')})
})

在ember中,只要模型接收到数据,就会触发LoadingRoute。

RM.Public.ItemsRoute = Ember.Route.extend(
...snip...
  setupController:(controller, model) ->
    controller = @controllerFor('public/items')
    controller.set("model", model)

  model: ->
    RM.Item.find({}).then( (modelData) ->
      modelData
    )
)

但在这种情况下,加载路线只会触发一次。

以下是正在运行的LoadingRoute的生活示例 http://jsbin.com/ANERoRi/1/edit

1 个答案:

答案 0 :(得分:0)

加载路径仅在Ember从一个路径转换到另一个路径时触发,而Ember正在等待从模型钩子返回的模型进行解析。这就是说你做的最简单的事情就是挂钩文件的ajax触发器并手动弹出一些html。这是一个迷你库,您可以通过调用AjaxNotice.initializeGlobalEvents();一次来启动它(可能在您的应用程序路径中,或者应用程序视图的didInsertElement。

var AjaxNotice = {

  initializeGlobalEvents: function () {
    $(document).ajaxStart(function () {
      AjaxNotice.addAjaxNotice();
    });

    $(document).ajaxStop(function () {
      AjaxNotice.removeAjaxNotice();
    });
  },

  addAjaxNotice: function () {
    AjaxNotice.slideInNotice();
  },

  removeAjaxNotice: function () {
    AjaxNotice.slideOutNotice();
  },

  slideInNotice: function () {
    $('body').append(AjaxNotice.getHtml());
  },

  slideOutNotice: function () {
   $("#ajax_notice").remove();
  },

  getHtml: function () {
    return '<div id="ajax_notice" class="ajax_spinner"> Working...</div>'
  }
}