[英]Ember route model blocks javascript
我有一个IndexRoute
和PricingRoute
,它们都使用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.