使用CoffeeScript编写backbone.js应用程序是否存在任何固有问题?你遇到了一些你无法解决的问题,或者不得不使用一些特别笨重的解决方法?backbone.js如何与CoffeeScript一起使用?
回答
CoffeeScript只是JavaScript上的一个语法层。它本质上是JavaScript。你可以在JavaScript中做任何事情,你可以在CoffeeScript中重现。
CoffeeScript和Backbone.js都是由同一作者(Jeremy Ashkenas)编写的。 backbone-on-rails gem默认生成CoffeeScript。虽然某些插件(例如您提到的Backbone-relational)可能需要额外的设置,但Backbone本身与CoffeeScript搭配非常好。
没问题,真的。至少,没有哪个不容易解决。
使用CS的问题是你可能会在任何地方使用CS相同的问题:
- 调试是在生成的JS
- CS还是做需要一个预处理步骤,可以是有时尴尬
- 你的团队的其余部分可能不知道CS
- 大约有CS一些奇怪的事情(他们引入“类”,但他们不是真正的类)
此外,由于具有Coffeescript的Backbone dev是基于“class”的,因此您会发现自己希望将您的课程分为单独的文件夹和单独的文件夹。正因为如此,你可能会陷入这样一种情况,那就是这些课程无序定义。例如,你的集合可能在你的模型之前被定义,这是不可能发生的。为此,我建议使用可以管理依赖关系(导入)的东西。我使用coffee-toaster,但还有其他几个选项(例如,Rails具有内置到资产管道的依赖管理)
这是我首选编写Backbone代码的方式。在我看来,BackScript.js开发在CoffeeScript中比在Javascript中更好。对我而言,他们像巧克力和花生酱一起走到一起。 (不是每个人都喜欢巧克力/花生酱......并不是所有人都喜欢BB/CS)
类语义 骨干的发展在很大程度上依赖于扩大原型,这是内置有CoffeeScript的东西。所以,在这里,你会在JS扩展视图:
App.Models.MyModel = Backbone.View.extend({
render: function() {
...
}
});
的CS替代是土生土长的经验:
class App.Models.MyModel extends Backbone.Model
render: ->
...
重写功能 有的东西你在骨干经常做,像重载函数变为更简单。在Javascript:
constructor: function (attributes, options) {
this.constructor.__super__.constructor.apply(this, arguments);
...
}
变为:
constructor: (attributes, options) ->
super
当你需要声明“此”语境中的CS绑定 “胖箭头”是真正有用的一个功能的情况下是“这“
当函数被回调时,Javascript设置'this'的方式不同。有几种方法来解决这个问题,但开箱即用,它是尴尬:
initialize: function() {
this.model.bind('reset', this.render);
},
render: function() {
this.$el.html("<ul></ul>");
this.model.each(this.renderItem); // <--- Fails on "reset" because 'this' is wrong
return this;
}
的CoffeeScript有=>
令牌时它就会被人称为将自动绑定“这个”的功能:
initialize: ->
@model.bind 'reset', @render
render: =>
@$el.html '<ul></ul>'
@model.each @renderItem # The fat arrow fixed it for you
@
当所有事情都说完之后,Backbone.js代码更容易编写,并且在使用CS编写时更容易阅读。至少,这是我的看法。
祝你好运!
- 1. 如何与Sinatra一起使用coffeescript
- 2. Require.js如何与Backbone.js一起使用
- 3. 与Coffeescript一起使用should.js
- 4. 将Coffeescript Underscore.js和Backbone.js放在一起
- 5. 与Backbone.js的使用CoffeeScript的问题
- 6. 如何使用coffeescript获取模型值Backbone.js Coffeescript
- 7. 与Jekyll一起使用backbone.js路由
- 8. 如何将Haskell Snap与Backbone.js一起使用
- 9. 如何获取Twitter Bootstrap Twipsy与Backbone.js一起使用
- 10. Backbone.js - Coffeescript延伸
- 11. 与Backbone.js一起使用胡子时事件不起作用
- 12. TypeError在CoffeeScript中使用Jasmine测试Backbone.js
- 13. Backbone.js的带的CoffeeScript
- 14. 的CoffeeScript/Backbone.js的:写一个字符串
- 15. 如何在Windows中一起使用CoffeeScript和Eclipse?
- 16. Backbone.js比较不排序(Coffeescript)
- 17. CoffeeScript中的Backbone.js setTimeout()循环
- 18. 推荐哪些UI框架与Backbone.js一起使用?
- 19. Datepicker jqueryui不能与require.js和backbone.js一起使用
- 20. 与backbone.js一起使用下划线模板
- 21. 如何使用SuperScrolloRama与Backbone.js查看
- 22. 如何与CoffeeScript的
- 23. Node.js与CouchDB和Backbone.js一起工作,json如何被服务?
- 24. 使用Backbone.js与_.noConflict()
- 25. 使用mers与backbone.js
- 26. 使用backbone.js与socket.io
- 27. 使用backbone.js与hammer.js
- 28. 如何使REFrostedViewController与UINavigationController一起使用
- 29. 如何使.hover()与.on()一起使用?
- 30. 如何使PdfLayer.SetPrint与PdfStamper一起使用?
参见例如https://github.com/PaulUithol/Backbone-relational/issues/91。我想知道CoffeeScript和主干集成是否还有其他问题。 – ipavlic 2012-07-31 14:25:48