我在rails项目中使用react-rails
gem。虽然javascript
和jsx
一致,但我的coffeescript
文件似乎无法正常工作。请注意,我正在尝试使用纯coffeescript
解决方案,没有内插的jsx。
在我的coffeescript
文件中(其扩展名为*.js.coffee
)
{div} = React.DOM
Hello = React.createClass
render: ->
(div {}, ['Hello ' + @props.name])
在我看来:
= react_component 'Hello', name: 'World'
这是我一直在我的控制台中出现的错误:
ReferenceError: Hello is not defined
答案 0 :(得分:9)
取自react-rails
回购中的我的GitHub issue,jakubmal回答:
CoffeeScript创建一个闭包,看起来很像:
(function() { var div, hello; div = React.DOM.div; Hello = React.createClass({ render: function() { return div({}, ['Hello ' + this.props.name]); } }); }).call(this);
在关闭之外使
Hello
无法访问。您可以做的是将
Hello
分配给窗口,如:window.Hello = React.createClass
或使用快捷方式/技巧:
@Hello = React.createClass
为了保持您的应用结构清洁,您需要至少应用一个 命名空间模式。 http://addyosmani.com/blog/essential-js-namespacing/
此外,在react-rails
google小组中,Paul O'Shannessy写道:
帮助程序非常天真,并期望您的组件可用作全局变量。 Coffeescript将每个文件包装在一个闭包中,然后它们被链轮连接起来,这违反了全局假设。这是在开发过程中出现的,但我们决定某些人会比任何人都更好。