2016-04-03 49 views
-1

我想我在这里失去了一些非常微不足道的东西。我创建了一个Backbone View如下(不延长Backbone.View):骨干查看实例不按预期工作

var PlayersView = new Backbone.View({ 
    initialize: function() { 
     this.render(); 
    }, 
    render: function() { 
     console.log("hello World"); 
    } 
}); 

但是当我运行这段代码就不会记录。当我明确执行时:PlayersView.render();也不起作用。

但是,下面的代码工作:

var PlayersView = Backbone.View.extend({ 
    initialize: function() { 
     this.render(); 
    }, 
    render: function() { 
     console.log("hello World"); 
    } 
}); 

var playersview = new PlayersView(); 
+0

我在这里没有看到任何错误..http://jsfiddle.net/kadoshms/w3r8f8uu/1/ – MorKadosh

+0

嘿,你的小提琴有我的第二个代码片段,它也适用于我的问题,问题是第一个片段(我创建视图时没有扩展Backbone视图),谢谢。 – akshayKhot

回答

1

View构造does not accept properties添加到构造的对象。它接受一些特殊的选项,比如'model','tagName'等等。但第一个代码片段中的initialize(...)和​​属性会被有效忽略。

提供initialize,render的正确方法是使用Backbone.View.extend({...})

+0

感谢您的回答,我明白现在有什么问题。但构造函数的文档说:“如果视图定义了一个初始化函数,它将在视图第一次创建时被调用。 '所以应该在创建视图时调用它,对吗? – akshayKhot

+0

这里的文档有点不完整。它应该说'如果Backbone.View的扩展定义了一个初始化函数,它将在视图第一次创建时被调用。'它假定你将扩展基类'View'类,因为这是正确的方法通过提供一个'render()'方法来做任何有趣的事情。 –

+0

明白了,所以总结一下,我不能只创建一个单一的Backbone视图并将其呈现在屏幕上。我将不得不扩展Backbone.View,然后初始化/渲染它。那么创建单个Backbone视图的用途在哪里? – akshayKhot

0

http://backbonejs.org/#View-extend

延伸

Backbone.View.extend(属性,[classProperties])通过创建自定义视图类 视图开始使用。您需要覆盖 呈现函数,指定您的声明性事件,或者可能是视图根元素的tagName,className或id。

换句话说,您的第一个视图的渲染方法并未被您的自定义渲染/初始化函数覆盖。 使用extend时,实际上让Backbone明白你希望使用自己的方法而不是“默认”的方法。

+0

谢谢,那么创建视图的单个实例的最佳做法是什么,即不扩展Backbone.View? – akshayKhot

+0

这样做只是创建一个没有任何自定义属性和方法的视图。你应该在创建你自己的定制视图时扩展'Backbone.View',然后你可以创建任意数量的实例。 – MorKadosh