【问题标题】:Why does Backbone JS .extend() always return an empty function?为什么 Backbone JS .extend() 总是返回一个空函数?
【发布时间】:2014-03-07 10:44:16
【问题描述】:

我是主干 js 的新手,在看似微不足道的方面遇到了困难。

每当我调用 Backbone.Collection.extend、Backbone.Model.extend 或 Backbone.View.extend 时,返回的是一个空函数,而不是具有继承属性的对象。

例子:

var view = Backbone.View.extend({
});

console.log("View:");
console.log(view);

Console.log 显示:

View:
function()

如果你点击“function()”,什么都不会发生,它只是一个没有属性的空函数。

在我尝试扩展 Backbone 对象的任何地方,我都会遇到同样的问题。当我探索这个问题时,我尝试了这个:

var collection = Backbone.Collection.extend({
    add: function() {
        console.log("Add gets called");
        return {};
    }
});

console.log("Collection:");
console.log(collection);
console.log(collection.add());

控制台显示:

Collection:
function()
TypeError: collection.add is not a function

我不认为我的 requirejs 设置有什么不寻常之处,所以我希望有更多使用下划线和主干的 extend() 经验的人能告诉我为什么他们有时会返回空函数。

任何关于我可能会研究解决此问题的领域的建议都将受到欢迎。作为所涉及的库的新手,我对如何解决这个问题有点摸不着头脑,以便继续使用我的应用程序。

【问题讨论】:

  • extend返回一个构造函数,你应该使用new关键字创建实例,然后你可以调用add函数。
  • var collection = new Backbone.Collection.extend({});你可以使用这样的东西
  • 这很有意义并且按预期工作,谢谢。

标签: javascript jquery backbone.js underscore.js


【解决方案1】:

扩展 Backbone.Collection.extend(properties, [classProperties])

要创建您自己的 Collection 类,请扩展 Backbone.Collection,提供实例属性以及可直接附加到集合的构造函数的可选 classProperties。

所以在你的情况下viewCollection class,尝试使用new 关键字来实例化它:

var view = Backbone.View.extend({
});

console.log("View:");
console.log(new view()); // Here

【讨论】:

  • 从头到尾我仍然不明白为什么只分配 view = new Backbone.View.extend();不工作
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 2016-03-30
  • 1970-01-01
  • 2016-06-15
  • 2014-11-15
  • 2019-05-20
相关资源
最近更新 更多