【问题标题】:Defining HTML template in Backbone.js using Coffeescript使用 Coffeescript 在 Backbone.js 中定义 HTML 模板
【发布时间】:2012-11-05 18:26:40
【问题描述】:

我目前正在将 javascriptbone.js 视图转换为 coffeescript,但它无法正常工作。

我工作的原始 Javascript 视图是

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;
});

我的咖啡脚本视图是

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

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

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

Test

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

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

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

【问题讨论】:

    标签: javascript backbone.js coffeescript


    【解决方案1】:

    当它只是一个普通的局部变量时,您将 mainHomeTemplate 引用为实例变量(@mainHomeTemplate,与 this.mainHomeTemplate 相同)。你想要:

    Test = Backbone.View.extend
        el: $ '#page'
    
        render: ->
            $(@el).html mainHomeTemplate # <-------- No '@' on 'mainHomeTemplate'
    

    当我在这里时,您应该让 Backbone 为 el 处理 jQuery 内容,并且您的视图已经有 @$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
    

    【讨论】:

    • 非常感谢!你很到位,给出了很好的解释,并帮助我改进了我的其余代码。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2012-01-21
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多