2013-07-26 2 views
1

Запуск на сервере rails, когда я делаю вызов ajax, отправив форму, форма проходит через 3 раза. На этом рисунке показано, что 3 не удалось, но были ли они неудачными или успешными, они выполняются 3 раза. enter image description hereRequireJS Ajax называется слишком большим

Когда я забираю:

require(['/assets/monitor/monitor'], function(Monitor){ 
    var monitor = new Monitor(); 
    monitor.initial(); 
}); 

она перестает работать полностью. Когда я забираю только:

var monitor = new Monitor(); 
monitor.initial(); 

это делает 1 ajax звонок.

Почему аякс все еще вызывается, когда я не вызываю экземпляр файла монитора?

main.js

requirejs.config({ 
    baseUrl: './', 
    paths: { 
     'jquery': '/assets/monitor/lib/jquery-1.10.2.min', 
     'jquery-ui': '/assets/jquery-ui-1.10.2.custom.min', 
     'async': '/assets/monitor/lib/async', 
     'bootstrap': '/assets/monitor/lib/bootstrap', 
     'underscore': '/assets/monitor/lib/underscore', 
     'datatables': '/assets/monitor/lib/jquery.dataTables.min', 
     'DT_bootstrap': '/assets/monitor/lib/DT_bootstrap' 
    }, 
    shim: { 
     'jquery': { 
      exports: '$' 
     }, 
      'async': { 
       exports:'async' 
     }, 
     'bootstrap': { 
       deps: ['jquery'] 
     }, 
     'underscore': { 
      exports: '_' 
     }, 
     'datatables': { 
      deps: ['jquery'] 
     }, 
     'DT_bootstrap': { 
      deps: ['datatables'] 
     } 
    } 
}); 
require(['/assets/monitor/monitor'], function(Monitor){ 
    var monitor = new Monitor(); 
    monitor.initial(); 
}); 

monitor.js

define(['jquery', 'async', 'bootstrap'], function($, async, jQuery) { 

    var Monitor = function() {}; 
    // Kicks off the file 
    Monitor.prototype.initial = function() { 
     var hostname = 'http://somehostthatworks'; 
     var portNumber = 'some port that works'; 
     var contentType = 'JSON'; 
     var versionNumber = '1.1'; 
     this.receiveMonitor(hostname, portNumber, contentType, versionNumber); 
    }; 
    ... 
    Monitor.prototype.recieveMonitor = function(hostname, portNumber, contentType, versionNumber) { 
     $("form").submit(function() { 
      //Some ajax that works when form is submitted. 
     }); 
    }; 
    ... 
}); 

application.js

// Call requireJS and main.js 
//= require ./monitor/lib/require 
//= require ./monitor/main 

ответ

0

Перемещая призывы к require.js и main.js из-за применения. js и на страницу, в которой они мне были нужны (ну, звоните - monitor.html.erb), я смог остановить дублирование.

monitor.html.erb

... 
<% @stylesheetIncludes= ["bootstrap.min", "jquery-ui-1.10.2.custom.min", "monitor", "jquery.dataTables.min"] %> 
<% @javascriptIncludes= ["monitor/lib/require", "monitor/main"] %> 
<!-- Monitor Service --> 
<%= render 'monitor/monitorService' %> 
...