gpt4 book ai didi

javascript - Ember 路由模型阻止 javascript

转载 作者:行者123 更新时间:2023-12-03 10:52:06 24 4
gpt4 key购买 nike

我有一个 IndexRoutePricingRoute,两者都使用 plan 模型以便从 JSON API 检索计划列表。模型加载得很好,没有问题。

我还在 index.html 页面上添加了 Google+ SDK。此外,带有侧导航的 Materialize CSS 库通过应用程序 Controller 内的 Javascript 进行初始化。

问题是,每当我刷新/初始加载这两条 route 的任何一条时,Google+ 跟随小部件都不会显示,并且 Materialize 侧面导航无法正常工作(可能是 JS init 无法正常工作)。但是,如果我只是删除路线上的模型(以两者中的一个为准),Google+ 小部件和 Materialise 侧面导航都会按预期工作。那么,路线模型到底出了什么问题,以至于干扰了 Google+ 和 Materialise 库?

值得注意的是,我还在应用程序 Controller 中的侧导航之前初始化了 Facebook 库,但即使对于模型也能正常工作。

application.js Controller :

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');
}
});

pricing.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>

最佳答案

首先,在 Controller 中初始化那些与 View 相关的东西在概念上是错误的。

不建议以这种方式重写 init 方法,除非你做得正确。实际上,您缺少调用父级 init

export default Ember.Controller.extend({

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

问题可能是,您试图在插入 View 之前初始化这些模块。特别是,由于模型调用是异步的, Controller 在插入 View 之前完成 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')
});

我也更喜欢 google+ 的初始化,就像您对 Facebook 所做的那样。

关于javascript - Ember 路由模型阻止 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28395114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com