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 ...
Trong mã không được tưới nước, người trợ giúp có phương thức getTemplate không? – Josh
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
Đã 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