将内容添加到在Backbone with Rails中动态创建的元素

时间:2012-12-19 04:56:59

标签: javascript ruby-on-rails-3 backbone.js coffeescript

我在Rails 3中有一个Backbone View,其中initialize有一行,用这个类动态创建一个div

initialize: () ->
  $('body').append('<div class="new"></div>')

div的内容位于eco文件“new.jst.eco”中。目前的代码:

class TestApp.Views.NewDivView extends Backbone.View
  el: '.new' # newly created in the initialize method.
  template: JST['new']

render: ->
  $(@el).html(@template())
  this

initiaize: () ->
  $('body').append('<div class="new"></div>')

如何在同一视图中将模板的内容添加到新创建的div中?

2 个答案:

答案 0 :(得分:0)

我想:

var event_html = template($('#calendar-event-template').html());  // Add apt. selector for template.
$(event_html({title: title, description: description})).appendTo($(el))

其中:

$(el) = $('body .new');

会奏效。 我没有从引用中更改代码,因此您可以在那里轻松搜索。 参考: http://japhr.blogspot.in/2011/08/getting-started-with-backbonejs-view.html

答案 1 :(得分:0)

backbone code开始,el中首先设置this._ensureElement();,然后调用initialize。所以我相信这里el不会按照你想要的方式设置。它只是一个简单的div

解决方案可以是body指定el作为视图(可能不是最佳做法),将模板内容包装在<div class="new"></div>中。

<div class="new">
  <!-- put template content here -->
</div>

并且查看你可以写(我不知道coffeescript语法,因此用javascript编写):

view = Backbone.View.extend({
  el : 'body',

  template : "respective_template",

  render : function() {
    this.$el.append(this.template());
    this.setElement(".new"); /* this will change the el for the view from body to a div with class new and will delegate all bound events also if any */

    return this;
  }     
});

我们从设置el的代码中得出的假设可能是错误的,但您可以尝试一下。