javascript - 使用 Coffeescript 在 Backbone.js 中定义 HTML 模板

标签 javascript backbone.js coffeescript

我目前正在将 javascript backbone.js View 转换为 coffeescript,但它无法正常工作。

我工作的原始 Javascript View 是

define([
  'jquery',
  'underscore',
  'backbone',
  'text!templates/dashboard/main.html'
], function($, _, Backbone, mainHomeTemplate){

  var Test = Backbone.View.extend({
    el: $("#page"),
    render: function(){
      this.$el.html(mainHomeTemplate);
    }
  });
  return Test;
});

我的 coffeescript View 是

define [
  'jquery',
  'underscore',
  'backbone',
  'text!templates/dashboard/main.html'
], ($, _, Backbone, mainHomeTemplate) ->

Test = Backbone.View.extend
    el: $ '#page'

    render: ->
        $(@el).html @mainHomeTemplate

Test

当我尝试初始化测试 View 时,我得到它说测试未定义。

app_router.on('route:defaultAction', function (actions) {
      require(['views/dashboard/testnew'], function(Test) {
        console.log(Test)
        var test = new Test();
        test.render();
       });

任何帮助将不胜感激。谢谢

最佳答案

当它只是一个普通局部变量。你想要:

Test = Backbone.View.extend
    el: $ '#page'

    render: ->
        $(@el).html mainHomeTemplate # <-------- No '@' on 'mainHomeTemplate'

当我在这里的时候,你应该让 Backbone 为 el 处理 jQuery 的东西,你的 View 已经有 @$el (假设您使用的是最新版本的 Backbone)因此您不必 $(@el):

Test = Backbone.View.extend
    el: '#page'
    render: ->
        @$el.html mainHomeTemplate

我假设您的 define 函数中缺少缩进也只是一个复制/粘贴错误;您必须非常小心 CoffeeScript 中的缩进,在将 CoffeeScript 代码粘贴到问题中时更是如此。您还可以使用普通的 CoffeeScript 类机制代替 Backbone.View.extend。您的最终结果应如下所示:

define [
  'jquery',
  'underscore',
  'backbone',
  'text!templates/dashboard/main.html'
], ($, _, Backbone, mainHomeTemplate) ->

    class Test extends Backbone.View
        el: '#page'

        render: ->
            @$el.html mainHomeTemplate

    Test

关于javascript - 使用 Coffeescript 在 Backbone.js 中定义 HTML 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238086/

相关文章:

javascript - jQuery 1.10 导致 css3 动画在 Chrome 中失败

javascript - 如何将截取的 javascript 转换为 coffeescript

javascript - 扩展时如何合并而不是替换对象

javascript - 圆形 Div 周围的 Div

javascript - 如何在给定的对象结构中使用 Ramda 执行嵌套更新?

javascript - 更改从 JSON 数组创建的列表中的项目

javascript - Backbone.js:将事件类应用于模板中的事件元素?

javascript - 将新数据添加到 Backbone.js 中的集合

javascript - 动态更新矩形的宽度和高度

javascript - 使用 Jasmine-jQuery,我尝试使用固定 HTML,但测试未通过