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

Should the model or controller load data in Ember JS?

本文关键字:加载 数据 JS Ember 控制器 模型      更新时间:2023-09-26

我正在努力寻找一个明确的模式,在哪里处理我的模型加载数据。首先,我应该说我正在使用一个简单的$.ajax包装器来加载我的数据,而不是Ember data。

看看这篇来自一位Discourse开发人员的博客文章,你可以看到他建议在模型上使用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;
      }
    );
  }
});

另一方面,我发现了另一篇关于在Ember中处理数据的博文。这一次,建议在$.ajax周围放置一个包装器,并从控制器进行调用。

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

这是一个优先考虑的问题,还是有一个约定在MVC我应该遵循这里?

选择第一种方法。你提到的第二篇博文是2012年1月的,在《余烬》的世界中这是永恒的,不再是创造控制器的正确方式。您不再需要从头创建它们(使用Em.Object.create())。现在,Ember.js在你初始化应用程序时为你做了这些。如果我是你,我也会在加载/管理数据时更好地理解模型、路由和控制器的作用。从emberjs.com的指南开始。

无论如何,尽量远离2012年的博客文章,它们大多过时了。你也可以查看http://emberwatch.com的帖子,他们在保持emberjs信息的更新方面做得很好。