簡體   English   中英

灰燼路線模型塊JavaScript

[英]Ember route model blocks javascript

我有一個IndexRoutePricingRoute ,它們都使用plan模型以便從JSON API檢索計划列表。 模型加載就很好了,那里沒有問題。

我還在index.html頁面上添加了Google+ SDK 同樣,具有側面導航的Materialize CSS庫通過application controller內的Javascript初始化。

問題是,每當我刷新/初始加載這2條路線中的任何一條時,Google +跟蹤小部件都不會顯示,並且Materialize側面導航不起作用(可能是JS初始化無效)。 但是,如果我僅刪除路線上的模型(2個中的任意一個),則Google+小部件和Materialize側面導航均會按預期工作。 那么,路由模型究竟會如何干擾Google+和Materialize庫呢?

值得一提的是,我還在應用程序控制器中的side-nav之前初始化了Facebook lib,但是即使在模型中也可以正常工作。

application.js控制器:

export default Ember.Controller.extend({

  init: function ()
  {
    // initialize facebook SDK
    var facebook_id = this.facebook_app_id;
    window.fbAsyncInit = function ()
    {
      FB.init({
        appId:   facebook_id,
        xfbml:   true,
        version: 'v2.1'
      });
    };
    (function (d, s, id)
    {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id))
      {
        return;
      }
      js = d.createElement(s);
      js.id = id;
      js.src = "//connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));

    // load side nav drawer
    Ember.$(document).ready(function ()
    {
      Ember.$('.button-collapse').sideNav();
    });
  }
});

index.js路由:

export default Ember.Route.extend({

  model: function ()
  {
    return this.store.find('plan');
  }
});

Price.js路線:

export default Ember.Route.extend({

  model: function ()
  {
    return this.store.find('plan');
  }
});

的index.html

<html>
<head>
...
  <script src="https://apis.google.com/js/client:platform.js" async defer></script>
</head>
...
</html>

首先,在控制器中初始化那些與視圖相關的東西在概念上是錯誤的。

除非您做對,否則不建議以此方式覆蓋init方法。 實際上,您缺少將父init調用的功能。

export default Ember.Controller.extend({

  init: function ()
  {
      this._super(); // missing

可能的問題是,您試圖在插入視圖之前初始化那些模塊。 特別是,由於模型調用是async ,控制器將在插入視圖之前完成init方法。

你應該做的是,

// assuming you use ember-cli 
// views/application.js 
import Ember from 'ember';

export default Ember.View.extend({
    initLibs: function () {
        // do your initialization here
    }.on('didInsertElement')    
});

我也希望像對Facebook一樣,對google +進行初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM