【问题标题】:backbone.js changing el value of views before render is called在调用渲染之前,backbone.js 更改视图的 el 值
【发布时间】:2013-11-12 17:43:04
【问题描述】:

我有 3 个不同的视图,每个视图共享相同的 el 值:

el:"<div id='main-inner'>"

在渲染函数中:

this.$el.html(html);

我被要求将所有这些组合到一个页面上,因此我尝试制作一个主视图,其中包含这些视图的集合并在其中呈现每个视图。问题是它们每个都写入相同的元素 #main-inner 并在附加它自己的 html 值之前清除它的 html。在从主/包装视图渲染之前更改 el 值的正确方法是什么?这是最好的方法吗?

谢谢!

【问题讨论】:

  • 让每个视图创建自己的&lt;div&gt; 并将其放入#main-inner,然后调用view.remove() 清理旧视图,然后再添加新视图。
  • 你能给我举个例子吗?我不明白为什么要调用 view.remove()?
  • 在显示下一个之前,为上一个调用close函数并绑定后续函数close: function() { this.stopListening(); this.$el.empty(); }
  • @UlugbekKomilovich:如果你想$el.empty()而不是$el.remove(),当已经有一个remove可以被覆盖时,为什么还要添加close
  • @muistooshort,我想说,使用this.$el.empty(),而不是this.$el.remove();

标签: javascript backbone.js views render el


【解决方案1】:

在初始化视图时将 el 交给视图:

var view1 = new myView({el:'#div1'});
var view2 = new myView({el:'#div2'});
var view3 = new myView({el:'#div3'});

在你看来:

var myView = Backbone.View.extend({

   initialize: function(options){
     this.el = options.el; 
   }

});

现在你有了视图,每个渲染都在它自己的el中。

希望这能有所帮助。

【讨论】:

  • 在这种情况下,您的初始化程序是多余的。
  • 我尝试在此示例中以这种方式注入 el 值 jsfiddle.net/TFtLL/8 但它不起作用:/
【解决方案2】:

您可以将您的 el 定义为全局并使用它。 示例:

App.Common.el = "";

使用:

App.Common.el

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2013-05-14
    相关资源
    最近更新 更多