草庐IT

javascript - 带液体火焰的 Ember 加载模板

coder 2025-03-23 原文

我一直在对此进行大量修补,但似乎无法使其正常工作。我希望在等待我的模型 promise 返回时显示我的加载模板。

我的理解是,默认情况下,如果我有 app/templates/loading.hbs,这个模板将在所有路由中呈现。然而,即使我在路线之间切换时使用了该模板,旧路线仍然会显示,直到模型返回,此时我的液体火力转换发生,您将被带到下一条路线。

我已经尝试过为每条路线创建嵌套加载模板的各种版本,尝试为加载模板的每条路线创建子路线,甚至弄乱了可用的 beforeModel/afterModel 方法,但我没有取得任何进展。这是我在启动之前要跨越的最后一个障碍,我很困惑为什么我不能让它工作。这是我认为相关的一堆代码。

注意:我使用的是 Ember CLI 和 Liquid Fire。我的数据也暂时从 Ember 服务返回到模型。

路由器

Router.map(function() {
  this.route('reviews', function() {
    this.route('index', {path: '/'});
    this.route('review', {path: '/:review_id'});
  });
  this.route('movies');
  this.route('about');
});

app/template/loading.hbs

<div class="content-container">
    <h1>Ish be loading</h1>
</div>

最慢​​模型路线

export default Ember.Route.extend({
    activate() {
        this._super();
        $("html,body").animate({scrollTop:0},"fast");
        $("body").addClass('movies');
    },
    deactivate() {
        $("body").removeClass('movies');
    },
    model() {
        const movies = this.get('movies');
        return movies.getMoviesInAlphOrder();
    },
    afterModel: function() {
        $(document).attr('title', 'Slasher Obscura - Movie Database');
    },
    movies: Ember.inject.service()
});

app.js

App = Ember.Application.extend({
    modulePrefix: config.modulePrefix,
    podModulePrefix: config.podModulePrefix,
    Resolver,
    ...
});
loadInitializers(App, config.modulePrefix);

服务方式

sortReviewsByDateDesc(arr) {
        return arr.slice().sort(function (a, b) {
            return a.review.date > b.review.date ? -1 : 1;
        });
    },
    getSetAmountOfMovies(num, arr) {
        const movieList = arr ? null : this.getMovies();
        const trimmedList = arr ? arr.slice(0, num) : movieList.slice(0, num);        
        return trimmedList;
    },
    setFirstReviewToFeatured(arr) {
        arr[0].isFeatured = true;
        return arr;
    },
    getLatestReviews(num) {
        const movieList = this.getMovies();
        const reviewList = movieList.filterBy('review');
        const indexList = this.sortReviewsByDateDesc(reviewList);
        const latestList = this.getSetAmountOfMovies(num, indexList);
        return this.setFirstReviewToFeatured(latestList);
    },
    getMoviesInAlphOrder() {
        const movieList = this.getMovies();
        let lowerCaseA, lowerCaseB;
        return movieList.sort(function(a, b) {
            lowerCaseA = a.title.toLocaleLowerCase();
            lowerCaseB = b.title.toLocaleLowerCase();
            return lowerCaseA.localeCompare(lowerCaseB);
        });
    },
getMovies() {
        return [{
            id: 1,
            title: '303 Fear Faith Revenge',
            year: "1999",
            imdb: "tt0219682",
            youtube: "iFV1qaUWemA"
        }
...
]

我已经阅读了 Ember 网站上的文档以及各种其他 Google 资源,但似乎无法弄清楚为什么我的加载模板根本没有呈现。任何帮助都是极好的!谢谢!

最佳答案

当您的模型 Hook 返回一个需要很长时间才能解决的 promise 时,加载模板就会触发,但是,您的模型 Hook 没有返回一个 promise 。

model() {
  const movies = this.get('movies');

  return movies.getMoviesInAlphOrder();
}

getMoviesInAlphOrder 正在返回一个同步数组。进一步与您交谈后发现,您已经为这个数组客户端预先填充了 540 个项目,所以这里的问题是加载模板不仅没有等待的 promise ,而且即使有无论如何它都会立即解决。

您的时间延迟很可能是由于呈现一长串项目而导致的性能问题。有几个 Ember 插件可以帮助解决这个问题,包括我自己的一个:https://github.com/runspired/smoke-and-mirrors

或者/此外,您可能需要考虑将数组“分块”为更小的位并一次渲染 25-50,或者设置一些分页。

关于javascript - 带液体火焰的 Ember 加载模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978213/

有关javascript - 带液体火焰的 Ember 加载模板的更多相关文章

  1. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  2. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  5. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  6. ruby-on-rails - Mandrill API 模板 - 2

    我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h

  7. ruby - Chef Ruby 遍历 .erb 模板文件中的属性 - 2

    所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP

  8. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  9. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

  10. ruby - 如何通过Middleman安装和使用Slim模板引擎 - 2

    一般来说,我是Middleman和ruby​​的新手。我已经安装了Ruby我已经安装了Middleman和gem以使其运行。我需要使用slim而不是默认的模板系统。所以我安装了Slimgem。Slim的网站只说我需要'slim'才能让它工作。中间人网站说我只需要在config.rb文件中添加模板引擎,但是没有给出例子...对于没有ruby​​背景的人来说,这没有帮助。我在git上找了几个config.rb,它们都有:require'slim'和#Setslim-langoutputstyleSlim::Engine.set_default_options:pretty=>true#Se

随机推荐