Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js初始化函数-我为什么需要它?_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript Backbone.js初始化函数-我为什么需要它?

Javascript Backbone.js初始化函数-我为什么需要它?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我最近尝试使用主干网,想问一个基本问题。此视图正在按预期进行渲染: (function($){ var ListView = Backbone.View.extend({ tagName: 'div', el: $('header'), initialize: function(){ _.bindAll(this, 'render'); this.render(); // not all views are self-rendering. This one is. },

我最近尝试使用主干网,想问一个基本问题。此视图正在按预期进行渲染:

(function($){

var ListView = Backbone.View.extend({
tagName: 'div',
el: $('header'), 

initialize: function(){
  _.bindAll(this, 'render'); 

   this.render(); // not all views are self-rendering. This one is.
},


render: function(){
  $(this.el).html("<ul> <li>hello world</li> </ul>");
}
});

  var listView = new ListView();
})(jQuery);
(函数($){
var ListView=Backbone.View.extend({
标记名:“div”,
el:$(“标题”),
初始化:函数(){
_.bindAll(这是“呈现”);
this.render();//并非所有视图都是自呈现的。这一个是。
},
render:function(){
$(this.el).html(“
  • 你好世界”
    • ”; } }); var listView=new listView(); })(jQuery);
我的问题是,为什么我不能不使用initialize函数并将其放在下面:

(function($){


var ListView = Backbone.View.extend({
tagName: 'div',
el: $('header'), 


render: function(){
  $(this.el).html("<ul> <li>hello world</li> </ul>");
}
});

this.render(); //No html is rendered on the page


var listView = new ListView();
})(jQuery);
(函数($){
var ListView=Backbone.View.extend({
标记名:“div”,
el:$(“标题”),
render:function(){
$(this.el).html(“
  • 你好世界”
    • ”; } }); this.render();//页面上不呈现html var listView=new listView(); })(jQuery);

我查看了源代码,初始化函数默认为空函数,这让我感到惊讶。我觉得答案很直截了当,我会感谢更有经验的Backbone.js开发人员的智慧。谢谢

我认为问题在于,在调用this.render()时,“this”指的是模块的上下文,而不是主干视图。如果重构代码以删除
this.render()
行,并在创建
listView
实例后添加
listView.render()
,则应该可以解决问题


总之,在本例中,您不需要使用
initialize
函数。

我认为问题在于,在调用
this.render()
时,“this”指的是模块的上下文,而不是主干视图。如果重构代码以删除
this.render()
行,并在创建
listView
实例后添加
listView.render()
,则应该可以解决问题

总之,在本例中,您不需要使用
初始化
函数。

试试这个

(function ($) {
    var ListView = Backbone.View.extend({
        tagName: 'div',
        el: $('header'),
        render: function () {
            $(this.el).html("<ul> <li>hello world</li> </ul>");
        }
    });

    var listView = new ListView();
    // Call render on the view instance
    listView.render();
})(jQuery);
(函数($){
var ListView=Backbone.View.extend({
标记名:“div”,
el:$(“标题”),
渲染:函数(){
$(this.el).html(“
  • 你好世界”
    • ”; } }); var listView=new listView(); //在视图实例上调用render render(); })(jQuery);
试试这个

(function ($) {
    var ListView = Backbone.View.extend({
        tagName: 'div',
        el: $('header'),
        render: function () {
            $(this.el).html("<ul> <li>hello world</li> </ul>");
        }
    });

    var listView = new ListView();
    // Call render on the view instance
    listView.render();
})(jQuery);
(函数($){
var ListView=Backbone.View.extend({
标记名:“div”,
el:$(“标题”),
渲染:函数(){
$(this.el).html(“
  • 你好世界”
    • ”; } }); var listView=new listView(); //在视图实例上调用render render(); })(jQuery);
另外,通过定义
初始化
函数,它将在首次创建视图时被调用,读定义,否则在创建新视图时可能需要设置的额外选项必须被调用,即
var listView=new listView({model:SearchModel})
Yes,通过定义
initialize
函数,它将在首次创建视图时被调用,读取定义,否则在创建新视图时,可能需要设置的额外选项必须被调用,即
var listView=new listView({model:SearchModel})
Yes,使用它以后就不需要调用render,实际上它是自渲染的。您并不总是需要initialize函数(例如,在您的示例中,您可以在实例化render方法时调用它),但当您需要在创建视图或进行某些设置时将某些选项传递给视图时,它非常有用。您并不总是需要initialize函数(例如,在您的示例中,您可以在实例化它时调用render方法),但当您需要在创建视图或进行某些设置时将某些选项传递给视图时,它非常有用。那么,我到底说了什么,没有解释它失败的原因?那么,我到底说了什么,没有解释它失败的原因?