我有一个requirejs
模块,我正在尝试加载markdownjs
。这是文件:
define(function(require) {
'use strict';
var Backbone = require('backbone');
var blogCollectionTemplate = require('hbs!app.templates/blog.collection.view');
var BlogModelView = require('views/blog.item.view');
var markdown = require('markdown');
var BlogCollectionView = Backbone.View.extend({
template: blogCollectionTemplate,
initialize: function() {
debugger;
},
render: function() {
this.$el.html(this.template());
this.renderAll();
return this;
},
renderAll: function() {
var that = this;
this.collection.each(function(blog) {
that.renderItem(new BlogModelView({model: blog}));
});
},
renderItem: function(blog) {
this.$el.find('#blog-posts').append(blog.render(blog).el);
}
});
return BlogCollectionView;
});
这是我的require.config
:
define(function() {
require.config({
hbs : {
templateExtension : 'hbs',
disableHelpers: true,
disableI18n : true
},
shim: {
'backbone': {
deps: [
'underscore',
'jquery'
],
exports: 'Backbone'
},
bootstrap: {
deps: [ 'jquery' ]
},
DlHighlight: {
exports: 'DlHighlight'
},
'jqueryMockAjax': {
exports: '$.mockjax',
deps: ['jquery']
},
json2 : {
exports: "JSON"
},
'underscore': {
exports: '_'
}
},
paths: {
backbone: 'libs/backbone/backbone',
bootstrap: 'libs/bootstrap/dist/js/bootstrap',
DlHighlight: 'libs/hl/hl-all',
highlight: 'libs/highlightjs/highlight.pack',
jquery: 'libs/jquery/jquery',
jqueryMockAjax: 'libs/jquery-mockjax/jquery.mockjax',
markdown: 'libs/markdown/lib/markdown',
text: 'libs/text/text',
underscore: 'libs/underscore/underscore',
hbs: 'libs/hbs/hbs',
handlebars: 'libs/hbs/Handlebars',
i18nprecompile: 'libs/hbs/hbs/i18nprecompile',
json2 : 'libs/hbs/hbs/json2',
'app.templates': '../templates/'
}
});
});
这是一种奇怪的行为。在我的initialize
中,当我点击调试器时,我可以访问我导入的markdown
对象,但如果我尝试使用markdown
对象,那么它总是{ {1}}。如果我将undefined
放在markdown
或其中一个initialize
方法中,则render
变量为markdown
。这没有任何意义,但有一些我不了解undefined
的行为。有什么想法吗?
答案 0 :(得分:2)
在阅读了markdown-js的凉亭安装代码之后,我发现什么凉亭安装将无法与RequireJS一起使用。尝试添加此填充程序:
"markdown": {
exports: "markdown"
}
至于为什么你能在没有垫片的情况下在调试器中获得markdown
的值,我相信你从全局范围内得到它(可能没有意识到)。 Markdown-js将自身安装到全局范围(window.markdown
,然后在加载时将其作为markdown
访问,如果没有其他变量干扰它)。这是猜测,但它符合事实。
答案 1 :(得分:1)
您可以在define
子句本身中要求所有这些模块:
define([
'backbone',
'hbs!app.templates/blog.collection.view',
'views/blog.item.view',
'markdown'
], function (
Backbone,
blogCollectionTemplate,
BlogModelView,
markdown
) {
'use strict';
// do stuff
});
另外,你的意思是“如果我在初始化或其中一种渲染方法中放入降价”?你的意思是在初始化和渲染中实际明确要求降价吗?有没有理由不在上面标记的define
子句中加载markdown?
如果您在初始化或渲染中明确要求降价,我不确定为什么会返回undefined
,但请告诉我是否将define
条款移至需要修复您的问题(或者如果您不能这样做)。也许您可以在markdown
模块中发布代码(如果它不是库)?