Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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 主干视图实例未按预期工作_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干视图实例未按预期工作

Javascript 主干视图实例未按预期工作,javascript,backbone.js,Javascript,Backbone.js,我想我遗漏了一些非常琐碎的东西。我创建了一个主干视图,如下所示(不扩展主干视图): 但当我运行这段代码时,它不会记录任何东西。当我显式执行时,它不起作用:PlayersView.render()也是 但以下代码是有效的: var PlayersView = Backbone.View.extend({ initialize: function() { this.render(); }, render: function() { consol

我想我遗漏了一些非常琐碎的东西。我创建了一个
主干视图
,如下所示(不扩展
主干视图
):

但当我运行这段代码时,它不会记录任何东西。当我显式执行时,它不起作用:
PlayersView.render()也是

但以下代码是有效的:

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

var playersview = new PlayersView();

要添加到构造对象的
视图
构造函数。它接受一些特殊选项,如“模型”、“标记名”等。但是第一个代码片段中的
initialize(…)
render(…)
属性实际上被忽略了

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

扩展

Backbone.View.extend(properties,[classProperties])开始使用 通过创建自定义视图类创建视图。您将要覆盖 render函数,指定声明性事件,可能还有 视图根元素的标记名、类名或id

换句话说,第一个视图的渲染方法没有被自定义渲染/初始化函数覆盖。
当使用
extend
时,您实际上让主干理解您希望使用自己的方法,而不是“默认”的方法。

我在这里没有看到任何错误。。嘿,您的小提琴有我的第二段代码,它在我的代码中也起作用,问题在于第一段代码(我创建视图时没有扩展主干视图),谢谢。谢谢你的回答,我现在明白问题所在了。但是构造函数的文档说,
如果视图定义了一个初始化函数,它将在视图第一次创建时被调用所以在我创建视图时应该调用它,对吗?那里的文档有点不完整。如果Backbone.View的扩展定义了一个initialize函数,它可能会说
,当视图第一次创建时,它会被调用。
它假设您要扩展基本
视图
类,因为这是通过提供
render()
方法使它做任何有趣的事情的正确方法。明白了,总之,我不能只创建一个主干视图并在屏幕上渲染它。我必须扩展主干.View,然后初始化/渲染它。那么,创建单个主干视图的用途在哪里呢?您可以创建视图的单个实例;请确保将自定义视图的概念与视图的实例分开。通过扩展
Backbone.View
可以创建一个自定义类,然后可以实例化的单个实例。自定义类是通过扩展来描述的,比如
var HelloWorldView=Backbone.View.extend({…})。然后可以创建该自定义类的实例,如
var helloView=new HelloWorldView()实际对屏幕进行渲染的事情是每当调用
helloView.render()
。是的,我知道扩展视图后可以创建视图的单个实例。我所说的单主干视图是这样的:
var PlayersView=new Backbone.view()
,我可以在屏幕上呈现此视图吗?谢谢,那么创建视图的单个实例的最佳实践是什么,即不扩展主干。视图?按照您的方式,只创建一个没有任何自定义属性和方法的视图。在创建自己的自定义视图时,应该扩展
主干.View
,然后可以创建任意数量的实例。
var PlayersView = Backbone.View.extend({
    initialize: function() {
        this.render();
    },
    render: function() {
        console.log("hello World");
    }
});

var playersview = new PlayersView();