2013-08-11 30 views
5

Tôi đã sau yêu cầu thiết lập js cho ứng dụng của tôi:require.js - module không xác định thông qua như là đối số để xác định callback

app.js

require.config({ 
    paths: { 
     jquery: '../thirdparty/jquery-1.9.1.min', 
     moment: '../thirdparty/moment', 
     spinningwheel: '../thirdparty/datepicker/spinningwheel', 
     handlebars: '../thirdparty/handlebars', 
     colorgenerator: '../usercolors', 
     baseconfig: '../config'  }, 
    shim: { 
     'baseconfig': [], 
     'spinningwheel': { 
      deps: [], 
      exports: 'SpinningWheel' 
     }, 
     'handlebars': { 
      deps: [], 
      exports: 'Handlebars' 
     } 

    } 
}); 


require(['jquery', 'dom', 'helpers', 'actions', 'history', 'store'], function ($, dom, helpers, actions, hist, store) { 
    //all good on the home front at this point 
    //all modules loaded properly 
    history.render(); 
}) 

history.js

define(['renderview'], function (renderview) { 
    //all good here, render view is loaded properly 
    return { 
     render: function() { 
      renderview({...}); 
     } 
    }; 
}) 

renderview.js

define(['jquery', 'helpers', 'dom'], function ($, helpers, dom) { 
    function renderView(view) { 
     var template = helpers.getTemplate(); //ERROR: helpers is undefined! 
    } 

    return renderView; 
}); 

helpers.js

define(['jquery', 'handlebars', 'history', 'dom', 'colorgenerator'], function ($, Handlebars, history, dom, ColorGenerator) { 
    var helpers = {}; 

    helpers.getTemplate = function() { 
     //do stuff 
    }; 

    return helpers; 
}); 

Vì vậy, như bạn có thể thấy, những người giúp đỡ được nạp tốt trong inital app.js gọi lại, nhưng khi tôi nhận được vào renderview.js được xác định. Các mảng phụ thuộc trong ví dụ là chính xác những gì tôi có trong mã thực tế của mình, tuy nhiên tôi đã chỉnh sửa tất cả dường như là mã không liên quan. Bất kỳ ý tưởng nào tại sao người trợ giúp sẽ được tải tốt trong app.js nhưng không được tải trong renderview.js? Đây có phải là phụ thuộc vòng tròn không? Không giống như tôi, nhưng tôi có thể đã ở đây quá lâu hôm nay :)

Cảm ơn bạn đã giúp đỡ hoặc gợi ý!

Thêm giải pháp hiện tại, mặc dù tôi không biết tại sao tôi cần phải làm theo cách này :)

define(['require', 'jquery', 'dom'], function (require, $, dom) { 
    function renderView() { 
     //responsible for rendering our view 
     var helpers = require('helpers'); 
     var history = require('history'); 

     var v = history.get(); 
     ... 
     tmpl = helpers.getTemplate(v.template); 
     ... 
    } 

    return renderView; 
}); 

Vì vậy, tôi không thể có được những mô-đun để tải đúng mà không làm đòi hỏi bên trong gọi lại, thay vì chỉ định chúng dưới dạng phụ thuộc. Sẽ yêu một số thông tin chi tiết về lý do tại sao ...

+0

Trong mã không được tưới nước, người trợ giúp có phương thức getTemplate không? – Josh

+0

vâng thưa ngài. Tôi sẽ chỉnh sửa cho rõ ràng. Trong hàm renderview.js, đối số ** helpers ** là không xác định, không chỉ là hàm đó. – Greg

+0

Đã làm việc này, nhưng không chắc chắn lý do tại sao tôi phải thực hiện sửa lỗi này. Tôi đã phải yêu cầu mô-đun "yêu cầu" và sau đó thực hiện "require ('helpers')" trong hàm renderview. Không chắc chắn tại sao, nhưng điều đó dường như làm cho mọi thứ hoạt động. – Greg

Trả lời

1

Vì vấn đề và giải pháp của bạn, có vẻ như bạn có một số circular dependency ở đâu đó trong các cuộc gọi yêu cầu của mình. Có thể một số mô-đun mà bạn yêu cầu trong mô-đun helper cũng yêu cầu mô-đun helpers.

+3

Nếu điều đó đúng, không nên đăng nhập? – user239558

Các vấn đề liên quan