gpt4 book ai didi

javascript - Backbone 延伸断裂

转载 作者:行者123 更新时间:2023-12-03 10:41:01 24 4
gpt4 key购买 nike

这以前从未发生过,它让我有点生气...但是如果我创建一个 View 并尝试扩展它 extend 不是 on 上的函数,看起来像一个有效的实例类(class)的。

var gv = Backbone.View.extend({
//Stuff here
});

console.log(gv);
//child {cid: "view2", $el: jQuery.fn.init[1], el: div.shell, constructor: function, events: Object…}

gv.extend({
//Stuff here
});
//Uncaught TypeError: gv.extend is not a function

我添加了一个工作示例。

$(document).ready(function() {
var RN = {};

RN.gvCreator = Backbone.View.extend({
el: '.shell',
render: function() {
console.info('building stuff');
}
});
//set up the global view for all menu items etc
RN.gv = new RN.gvCreator();
RN.gv.render();
console.info(RN.gv);
var indexView = RN.gv.extend({
el: '.content',
render: function() {
console.info('working');
}
});

Backbone.history.start();
});
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
<div class="shell"></div>

最佳答案

在您的示例中,您重新分配给 RN.gv。一开始它是一个构造函数,但随后你用一个实例来破坏它。

一般来说, View 实例在创建后无法扩展(至少不能使用该方法)。

您可以通过为构造函数和实例设置两个单独的变量来解决您的问题。请注意,在创建实例后(重新)扩展构造函数只会影响 future 的 View 实例 - 它们不会追溯影响之前创建的 View 实例。

<小时/>

编辑:为了回应下面的评论,新 View 扩展应该如何完成:

  var indexView = RN.gvCreator.extend({
el: '.content',
render: function() {
console.info('working');
}
});

这不会影响 RN.gv 的属性,因为它已经使用 RN.gvCreator 构造函数创建。 (请注意,RN.gvCreator 不会被上面的 extend 语句修改 - 相反,会创建一个使用 RN.gvCreator 的新 View 构造函数作为其基础。)

关于javascript - Backbone 延伸断裂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28781182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com