模型或控制器是否应该在Ember JS中加载数据?

时间:2013-04-28 12:54:21

标签: javascript ember.js

我很难找到一个明确的模式来处理我的模型加载数据的位置。首先,我应该说我使用简单的$.ajax包装器来加载我的数据而不是Ember数据。

查看this blog post from one of the Discourse developers,您可以看到他建议在模型上使用reOpenClass实现静态方法,该方法将加载相关数据。

App.RedditLink.reopenClass({

  findAll: function(subreddit) {
    return $.getJSON("http://www.reddit.com/r/" + subreddit + "/.json?jsonp=?").then(
      function(response) {
        var links = [];
        response.data.children.forEach(function (child) {
          links.push(App.RedditLink.create(child.data));
        });
        return links;
      }
    );
  }

});

另一方面,I found another blog post about handling data in Ember。这次建议在$.ajax周围放置一个包装器并从Controller进行调用。

App.booksController = Em.Object.create({
  content: null,
  populate: function() {
    var controller = this;
    App.dataSource.fetchBooks(function(data) {
      controller.set('content', data);
    });
  }
});

这是一个偏好问题还是在MVC中有一个约定我应该在这里跟随?

1 个答案:

答案 0 :(得分:2)

采用第一种方法。你提到的第二篇博文是从2012年1月开始的,它在Ember世界中是永恒的,并不再是创建控制器的正确方法。您不应该需要从头开始创建它们(使用Em.Object.create())。现在,当您初始化应用程序时,Ember.js会为您执行此操作。如果我是你,我还会尝试在加载/管理数据时更好地理解模型,路径和控制器的作用。从emberjs.com指南开始。

无论如何,试图摆脱2012年的博客帖子,它们大多已经过时了。你也可以查看http://emberwatch.com的帖子,他们在保持最新的emberjs信息方面做得很好。