2015-01-07 3 views
0

Я портирую свое приложение 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, и он появился на консоли, поэтому я знаю, что код обрабатывается. У меня может быть ошибка в настройке моей страницы.

+0

Закрытие '' похоже, отсутствует для '

Смежные вопросы