【问题标题】:Postponing search until template load推迟搜索直到模板加载
【发布时间】:2013-07-15 02:45:15
【问题描述】:

我想根据用户点击的内容(最近、趋势等)向服务器发出请求以获取一堆新闻文章。我希望能够先加载页面并在等待 API 响应时显示加载栏。我所拥有的,虽然它可以工作并返回我需要的 JSON 数据,但会等到响应从服务器返回,然后再加载任何内容。到目前为止,这就是全部:

我想要实现的是:加载一个空的对象数组,然后逐步对文章进行 API 调用(假设从这一小时、最后一小时、前一小时获取所有文章,等等on) 并且每当我检索文章时都会填充视图(我假设我可以以某种方式将它们注入控制器)但是我迷失了关​​于如何添加到该对象数组的 Emberisms。我想我需要制作一个 ArrayController,然后在所述数组中创建一个模型,然后调用一个函数来添加它,但正如我所说,我不知道如何动态地将项目添加到该控制器中

App = Ember.Application.create();

App.Router.map(function() {
  this.resource('today');
});

App.TodayRoute = Ember.Route.extend({
     model: function() {
        return $.getJSON('/today');
     }
});

详细说明我的问题的原因 - 我对如何用 ember 处理这个问题感到困惑。我很熟悉如何使用 jquery 来做这样的事情,但是我正在尝试学习框架并且在最初知道两者之间的分工是什么时遇到了一些麻烦。我知道实际的 AJAX 请求应该是 jquery,但我想在 Ember 中做尽可能多的事情。但是,如果这是应该由 jquery 完成的事情,那也没关系!

【问题讨论】:

  • 你的问题有点宽泛,让我们稍微剖析一下这个问题。 1. 你能展示一下后端返回的 JSON 格式是什么样的吗?看到 JSON 格式后可能会出现另一个问题: 2. 如果需要,您是否能够更改 API 返回数据的方式?还有一个 3. 你使用 ember-data 吗?
  • @intuitivepixel 我返回的 JSON 是一个对象数组,每个对象都有一个站点、一个标题和一篇文章。它是通过 NYTimes api,所以不幸的是,不,我无法更改它,尽管我可以在 ruby​​ if 中处理它。目前我没有使用 ember-data - 除了我没有找到使用它的明确理由(这是一个包含它的解决方案)之外,没有其他原因。我不知道您是否阅读了我最近的更新,但我觉得我在其中很好地概述了问题 - 如果没有,请告诉我我还遗漏了什么。
  • 对不起,由于我是 ember 新手,我不知道什么信息太多、太少或合适

标签: javascript jquery ruby ember.js sinatra


【解决方案1】:

getJSON 方法看起来有一个你可以使用的成功回调函数,可能是这样的吗?

App.TodayRoute = Ember.Route.extend({
     model: function() {
        $.getJSON('/today', function(data) {
           // hide loading here
           / data is the JSON returned
        });
     }
});

查看此链接http://api.jquery.com/jQuery.getJSON/

【讨论】:

  • 虽然这可行,但似乎我通过使用纯 jQuery 实现它来避免 ember。另外,我认为除了将其作为 Ember 模型之外,还有更好的解决方案,但我不确定那可能是什么。
【解决方案2】:

我找到了解决方案 - 就像所有 ember 一样,它非常简单。我使用了一些空白的夹具数据,然后将我的控制器定义如下。

App.ArticleRoute = Ember.Route.extend({
  model: function() {
    return App.Article.find();
  }
})

然后在页面加载时,我会调用一个方法

App.Article.createRecord({
    // Attributes, pulling from the returned JSON
})

简单! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2015-10-22
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多