Я портирую свое приложение Symfony на Ruby on Rails 4.2.0. Моя настройка отлично работает в symfony. Существует this old post о том, как использовать dojo с RoR, но он использует устаревший код.Получение Dojo для работы с Ruby on Rails 4
В моей application.html.erb меня
<script>dojoConfig = {async: true}</script>
<%= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/dojo/1.10.3/dojo/dojo.js'%>
я заменил Symfony оберток с рельсами из них. Я также изменил версию додзё. Я использовал 1.9.1. Rails генерирует этот HTML:
<script>
dojoConfig = {async: true}
</script>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.10.3/dojo/dojo.js">
Последняя строка сопровождается кучей сжатого JavaScript и близко тег сценария в Firebug.
Я не вносил никаких изменений в свой home/index.html.erb, где я тестирую этот код. В приложении/активы/javaascipts/home.js, у меня есть:
//require(["dojo/dom", "dojo/ready", "dijit/Tooltip"], function(dom, ready, Tooltip)
define(["dojo/dom", "dojo/ready", "dijit/Tooltip"], function(dom, ready, Tooltip)
{
ready(function()
{
var head = "<div class='footnote-text'>";
var tail = "</div>";
var fnt1 = head + dom.byId("fnb1").innerHTML + tail;
var fnt2 = head + dom.byId("fnb2").innerHTML + tail;
var fnt4 = head + dom.byId("fnb4").innerHTML + tail;
new Tooltip({ connectId: ["footnote1"],position:["after","above","below"],label: fnt1 });
new Tooltip({ connectId: ["footnote2"],position:["after","above","below"],label: fnt2 });
new Tooltip({ connectId: ["footnote4"],position:["after","above","below"],label: fnt4 });
new Tooltip({ connectId: ["footnote5"],position:["after","above","below"],label: fnt4 });
});
});
//require(["dojo/dom", "dojo/ready", "dijit/Dialog"], function(dom, ready, Dialog){
define(["dojo/dom", "dojo/ready", "dijit/Dialog"], function(dom, ready, Dialog){
ready(function(){
var fnt3 = dom.byId("fnb3").innerHTML;
myDialog = new Dialog({
title: "Contact Me",
content: fnt3,
style: "width: 300px"
});
});
});
Закомментированный из требует линии, что я использую в моем симфони приложении. Как вы можете видеть, я заменил их на определение, описанное на сайте dojo. Когда я бегу, я получаю следующее сообщение об ошибке на консоли Firebug:
ReferenceError: define is not defined
...define(["dojo/dom", "dojo/ready", "dijit/Tooltip"], function(dom, ready, Tooltip
Если я требовать вместо определения, я требовать не определен.
Update
Я попытался установить додзё в приложение, и добились определенного прогресса. Я скопировал загрузку из додзе в vendor/assets/javascript/dojo. Каталог додзё содержит подкаталоги додзё, dojox и цифры
Затем я добавил
//= require dojo/dojo/dojo.js
для приложений/активов/JavaScript/application.js. Я также изменил определение обратно, чтобы потребовать его в файле home.js. Когда я перезагрузил страницу, я получил сообщение о том, что не смог найти подсказку. Затем я добавил:
//= require dojo/dijit/Tooltip.js
При перезагрузке он жаловался на кучу других отсутствующих файлов js. Это та же проблема, что и у Symfony, поэтому я пошел на изображение Google. Как я могу добраться до рельсов для поиска файлов в каталогах поставщиков? Это одна из ошибок:
"NetworkError: 404 Not Found - http://amcolan.loc/dijit/_base/manager.js"
Update 2
С require_tree работал приложение активов, я думал, что это может работать поставщику, а также. Я добавил
//= require_tree ../../../vendor/assets/javascripts/dojo
в мой файл application.js. Когда я перезагрузил страницу, это заняло около минуты. Я предполагаю, что он загружает все в дерево каталогов dojo, что неудивительно. Загрузка страницы завершена без ошибок. Когда я зависал над элементом всплывающей подсказки (цель кода - показать всплывающие подсказки), Firebug выкрутил около двух тысяч ошибок и ушел.Все ошибки, как представляется, «ReferenceError: определить не определен»
Update 3
Я вернулся к использованию GoogleAPI. Мой заголовок application.html.erb выглядит так:
<head>
<meta charset="UTF-8">
<title><%= content_for?(:title) ? yield(:title) : "American Colonial Ancestors" %></title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<script>dojoConfig = {async: true}</script>
<%= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/dojo/1.10.3/dojo/dojo.js'%>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
Я отменил порядок включения javascript. Страница перезагружена без ошибок. Всплывающая подсказка не работает, но я не нахожу никаких ошибок при наведении курсора на элемент. Я поставил плохой оператор в код home.js, и он появился на консоли, поэтому я знаю, что код обрабатывается. У меня может быть ошибка в настройке моей страницы.
Закрытие '' похоже, отсутствует для '