所以,我有一个包含100,000多个项目的数组,这一行导致它吹掉了调用堆栈:
@sortedList.sort (a, b) ->
return if a.value > b.value then -1 else 1
Run Code Online (Sandbox Code Playgroud)
我即将实施一些自定义类型(建议,任何人?)来解决这个问题,但我只是想确保我没有做一些明显愚蠢的事情导致它爆炸.
是否可以将@template()分配给@el,如下所示:
someview.js.coffee
class SomeView extends Backbone.View
template: JST["app/templates/sometemplate"]
events:
'click' : 'onClick'
initialize: ->
render: ->
@el = @template()
onClick: ->
#do something
Run Code Online (Sandbox Code Playgroud)
index.js.coffee
class IndexView extends Backbone.View
initialize: ->
@collection.on('reset', @render, this)
render: ->
$(@el).html('')
for m in @collection.models
view = new App.Views.SomeView(model: m)
$(@el).append(view.render().el)
Run Code Online (Sandbox Code Playgroud)
sometemplate.jst.hamlc
.someview_template
.stuff_inside
Run Code Online (Sandbox Code Playgroud)
我所处的情况,SomeView类被div包裹,它让我失去了我想直接在'.someview_template'元素上分配的点击事件.我能想到解决这个问题的方法是重新设置@el = @template()......是可能的还是正确的方法呢?
是这样的情况,Backbone.View的@el应该始终是包含div,模板应该只是该div中包含的元素?如果将@el自动设置为@template()中找到的根节点,它似乎会更基本.我应该让sometemplate.jst.hamlc只包含".stuff_inside",然后在SomeView中设置$(@ el).addClass('someview_template'),这样我可以确定事件是否分配给该元素?
谢谢!
使用CoffeeScript编写backbone.js应用程序是否存在任何固有问题?您是否遇到了一些无法解决的问题或者必须使用一些特别笨重的解决方法?
我运行此代码 -
$(".imgClass").each( (elem,value)->
imgSrc = $(value).attr("src")
$(value).qtip({
content: "<img src=" + imgSrc + ">"
position:{
corner:{
target:'leftTop',
tooltip:'bottomRight'
}
}
})
)
Run Code Online (Sandbox Code Playgroud)
img显示正常,但工具提示始终位于目标的右下角,与leftTop相反.
我认为这可能是语法错误 - 任何人都可以帮忙吗?(另外,这是用coffeescript写的,因此没有; s,但是我保留了parantheses因为我还不清楚咖啡)
谢谢
在我的rails 3应用程序中,我有一个页面需要定期检查服务器以获取更新信息,然后相应地更新无序列表.按照Rails 3等效的periodic_call_remote显示的示例,我转换为适当的CoffeeScript并创建必要的.js.erb部分.
页面调用服务器,服务器使用正确的js文件进行响应,但页面上没有任何内容可以修改.alert('foo');工作正常,但任何顺序.html()或.replaceWith()不会.
这是我的CoffeeScript:
$(document).ready ->
setInterval () ->
$.ajax url: "programs", type: "GET", dataType: "script"
, 10000
Run Code Online (Sandbox Code Playgroud)
和相应的.js.erb:
$("#programlist").html("<%= escape_javascript(render @programs) %>");
Run Code Online (Sandbox Code Playgroud)
这里有问题吗?
我正在研究一个Backbone.View应该将集合呈现为可滚动列表的集合.
作为初始渲染的一部分,我需要访问一些布局属性(例如clientWidth),这些属性仅在渲染视图后才可用.
我的问题是,我如何知道何时将视图添加到DOM?
使用a Backbone.View通常有两种方法将视图附加到DOM:
创建视图>渲染>附加它:
view = new MyList().render()
$('#dummy').append(view.$el)
Run Code Online (Sandbox Code Playgroud)创建视图并就地呈现它:
new MyList({el: '#dummy'}).render()
Run Code Online (Sandbox Code Playgroud)注意:我知道(1)和(2)不是完全等价的,这不是重点.
让我们考虑我的列表定义如下:
class MyList extends Backbone.View
render: ->
@$el->html( ... )
@
layout: ->
max = $el.scrollWidth - $el.clientWidth
# ... disable / enable scrolling arrows based on max ...
Run Code Online (Sandbox Code Playgroud)
在MyList附加到DOM之后,您如何确保调用layout()?
我尝试使用grunt-contrib-coffee插件使用grunt编译我的coffeescript文件.但是跑步grunt coffee,我总是得到这个错误:
RangeError: Maximum call stack size exceeded
Run Code Online (Sandbox Code Playgroud)
这是我的grunt.js文件:
/*global module:false*/
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
meta: {
version: '0.1.0',
banner: '/*! PROJECT_NAME - v<%= meta.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %>\n' +
'* http://PROJECT_WEBSITE/\n' +
'* Copyright (c) <%= grunt.template.today("yyyy") %> ' +
'YOUR_NAME; Licensed MIT */'
},
lint: {
files: ['grunt.js', 'lib/**/*.js', 'test/**/*.js']
},
qunit: {
files: ['test/**/*.html']
},
concat: {
dist: {
src: ['<banner:meta.banner>', '<file_strip_banner:lib/FILE_NAME.js>'],
dest: 'dist/FILE_NAME.js' …Run Code Online (Sandbox Code Playgroud) 我试图找出为什么我的CoffeeScript代码不起作用:
HTML:
<a data-id="5">Click me</a>
Run Code Online (Sandbox Code Playgroud)
CoffeeScript的:
id = $('a').attr('data-id')
console.log id == 5
Run Code Online (Sandbox Code Playgroud)
问题是返回的数字attr('data-id')是一个字符串,并将其与实际数字进行比较,无法进行比较.我应该做些什么,以便我可以轻松地比较数字.
我是coffeescript的新手,也是javascript中的对象.我在coffeescript中有这段代码:
class Animal
constructor: (name) ->
@name = name
@upperName: ->
@name.toUpperCase()
@greetings ->
console.log 'Hello %s', @name
this.type = 'Animal'
Run Code Online (Sandbox Code Playgroud)
这是"编译"到这个JavaScript:
var Animal
Animal = (function() {
function Animal(name) {
this.name = name;
({
this.upperName: function() {
return this.name.toUpperCase();
}
});
this.greetings(function() {
return console.log('Hello %s', this.name);
});
}
Animal.type = 'Animal';
return Animal;
})();
Run Code Online (Sandbox Code Playgroud)
方法问候和upperName有什么区别???
" : "在课堂上做什么?
谢谢
如果我想将现有项目从Javascript移植到Coffeescript(在我的情况下,在Rails应用程序中),我是否需要转换现有的Javascript文件?我担心转换真正的大型和CDN托管文件,如jQuery和jQueryUI.我该如何解决这个问题?
coffeescript ×10
javascript ×7
backbone.js ×3
jquery ×2
ajax ×1
gruntjs ×1
integration ×1
node.js ×1
qtip2 ×1
ruby ×1
sorting ×1