1

我对 emberjs 很陌生,想知道处理以下问题的最佳方法是什么:

看法:

{{#if model}}
  <p>I exist</p>
{{else}}
  <p>Login first</p>
{{#if}}

在我的 JS 中:

App = Em.Application.create({});

App.MyRoute = Em.Route.extend({
  setupController: function(){
    $.get("some/ajax/call",function(data){
        controller.set('model', data)});
    }
  }
}};

在上面的示例中,setupController 将完成并闪烁<p>Login First</p>,当数据从 ajax 调用到达时,它会更改为<p>I exist</p>我尝试在模型中执行此操作,结果是相同的。

目前我使用一些 jquery 来隐藏和取消隐藏东西来解决这个问题,但我认为这不是最好的方法?对我来说似乎有点脆弱。任何建议都会很有帮助

谢谢

4

1 回答 1

1

您可以使用该afterModel钩子执行任何检查。这个钩子使用 jQuery 返回的模型触发,但在setupController.

model: function() {
  return $.get("some/ajax/call",function(data){
      return data;
  }
},

afterModel: function(model) {
  // if model is not valid 
  // transitionTo another route etc
}

请注意,您只是data从 jQuery返回promise。Ember 明白,当一个 promise 用一个值解决时,它就是model.

于 2013-07-18T10:51:50.900 回答