将Ember从Ember.Object虚拟数据迁移到$ .get中的数据时出现问题

时间:2014-02-20 21:49:12

标签: javascript asynchronous ember.js handlebars.js

我只想要一个$ .get调用来满足特定模型。我似乎无法找到任何清楚地显示如何执行此操作的文档?

即。我有一个应用程序控制器:

App.ApplicationController = Ember.ObjectController.extend({
  username: '',
  firstname: '',
  lastname: ''
});

如何使用$ .get中的数据设置用户名?我知道有Ember Data和其他库可以做到这一点,但我想在没有这些库的情况下这样做,并且更好地理解Ember如何使用异步数据..遗憾的是,他们的指南并没有多大帮助:/

感谢您的帮助:)

更新

感谢大家到目前为止的答案,但我认为我没有充分解释我的问题。

我有application.hbs

<div class="medium-8 columns">
 <dl class="account-menu right">
   <dd><p><a href="">Welcome, {{username}}</a></p></dd>
   <dd><p><a href="">Customer Support</a></p></dd>
   <dd><a href="#">Log Out</a></dd>
  </dl><!-- .acccount-menu -->
</div>

我有模特:

App.User = Ember.Object.extend({
  id      : '', 
  firstName : '',
  lastName  : '',
  username  : '',

  init: function(){
    console.log(App.Account.get('username');
  },

  fullName: function(){
    return this.get('firstName') + ' ' + this.get('lastName');
  }.property('firstName', 'lastName'), 

}).reopenClass({
  loadAccount: function(){
    return $.get( "http://localhost:8080", { id: 1, request: "account" }).then(function(response){ 
      App.Account = App.User.create({'username': response.username});
    });
  }
});

控制器与上述相同。我成功从App.User.create创建一个新的App.Account并成功触发App.User抽象类? init方法..问题是{{username}}永远不会更新?我知道我在这里缺少一些简单的东西!再次感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您可以将ApplicationRoute的模型设置为您获取的JSON:

App.ApplicationRoute = Ember.Route.extend({
   model: function() {
     return $.getJSON('your_url_goes_here');
   }
})

这样,每次进入路径时,模型(因此隐式地是控制器的content)都将被设置为AJAX调用返回的JSON。

答案 1 :(得分:0)

使用关联路线的model挂钩设置模型。在你的情况下:

App.ApplicationRoute = Ember.Route.extend({
    model: function(){
        return $.get.......
    }
});

模型钩子将接受异步调用,但是在模型钩子声明完成之前,ember不会继续呈现视图。

答案 2 :(得分:0)

伙计们非常感谢你的帮助..原来这是一个简单的疏忽......

返回我在loadAccount方法中创建的对象模型承诺'App.User',该方法由ApplicationRouter模型钩子调用。

错误代码

loadAccount: function(){
  return $.get( "http://localhost:8080", { id: 1, request: "account"    }).then(function(response){ 
    App.Account = App.User.create({'username': response.username});
});

好代码

loadAccount: function(){
  return $.get( "http://localhost:8080", { id: 1, request: "account"    }).then(function(response){ 
    return App.User.create({'username': response.username});
});

这很有道理。 $ .get方法向我的模型返回一个我从未在.then()方法中返回值的承诺

谢谢大家的回答和对此事的关注