【问题标题】:Parse.View.extend - "cannot read property 'extend' of undefined"Parse.View.extend - “无法读取未定义的属性‘扩展’”
【发布时间】:2015-10-27 14:53:00
【问题描述】:

目前正在为 Web 应用程序使用 Parse JavaScript SDK,但我也是 Backbone 的新手,而且由于这个特殊问题是 Parse 从 Backbone 复制过来的功能,我不确定我在哪里制作我的错误。

我有index.html,带有这个基本结构和脚本模板标签(供_underscore使用):

<div id="my-app">        

</div>
<script type="text/template" id="album-header-template">
    <div id="some-id">
          Some Content
    </div>
</script>

&lt;body&gt; 的末尾,以下脚本标签,用于处理 Parse 依赖项,加载 Parse,并使用我自己的 JS 文件:

<script src="libraries/node_modules/jquery/dist/jquery.min.js"></script>
<script src="libraries/node_modules/underscore/underscore-min.js"></script>
<script src="libraries/node_modules/parse/dist/parse-latest.min.js"></script>
<script src="app/ParseApp.js"></script>

然后在ParseApp.js,我试图通过创建简单的对象和视图来起步,我有以下内容:

$(function () {
    var Album = Parse.Object.extend("Album",{
            // Default attributes for the album
            defaults: {
              name: "Album Title"
            },

            // Ensure that each album created has a title
            initialize: function() {
              if (!this.get("name")) {
                this.set({"name": this.defaults.content});
              }
            },
        });

    var HomeView = Parse.View.extend({
        el: $("#my-app"),

        initialize: function() {
            console.log("new instance of HomeView");
            this.render();
        },

        render: function() {
            this.$el.html(_.template($("#album-header-template").html()));
        }
    });

    new HomeView;
});

当我在浏览器中运行index.html 时,我在控制台中收到以下错误:Uncaught TypeError: Cannot read property 'extend' of undefined(发生在var Home View = Parse.View.extend 行)。

最初,我认为这可能是因为 Parse 没有及时启动以供 ParseApp.js 使用它,基于我的脚本加载。但是,我从 Parse 运行了推荐的 "Test the SDK" script,它确实已初始化(此外,使用 var Album 添加对象也可以正常工作)。所以我真的很纠结是什么导致HomeViewParse.View 被“未定义”。

我可能忽略了一个简单的答案,但任何帮助将不胜感激,如果需要,我可以提供完整的文件。

【问题讨论】:

  • Cannot read property 'extend' of undefined - 本质上是说Parse.View 不是一个东西。您可以将其发送到控制台以检查是否存在。
  • 谢谢,这是一个很好的总结。我刚刚在控制台中运行了Parse.View,得到了undefined。现在我需要弄清楚为什么只有一些 Parse 方法在工作,虽然 - Parse.CollectionParse.Router (两者都在我引用的 example Todo app 中工作),但 Parse.ObjectParse.User 都返回它们正确的函数.很想听听关于 Parse SDK 仅提供部分功能的原因的想法。
  • 编辑:Parse.CollectionParse.RouterParse.View 现在都工作,并返回 undefined
  • 然后,查看浏览器控制台中的网络面板,检查库是否已加载。
  • @JackKoppa 你确定问题的原因了吗?我现在有一个非常相似的问题。谢谢!

标签: javascript backbone.js parse-platform sdk underscore.js


【解决方案1】:

不是一个非常令人满意的答案,但感谢 @Yura 和 @Daniel Blank 的帮助,发现错误是因为 Parse SDK 的最新版本(1.6.0 之后的所有版本)不再包含完整的 Backbone 功能.这包括我在 npm 本地使用的版本。

Parse SDK 方向的最佳解释在上面给出的链接中,对于那些希望继续使用 Parse 和/或 Backbone 的人来说,似乎有三个选项:

  1. 使用旧版本(1.5.0 是包含 Backbone 功能的最新版本)以维护您的 Backbone 功能,例如 Parse.CollectionParse.Router
  2. 尝试使用 Parse SDK-agnostic,同时继续使用 Backbone。可以使用基本的 Parse REST API,或尝试 the GitHub projects 之一尝试为您进行链接。
  3. 放弃 Backbone 向前发展,使用 Parse 和 VanillaJS,或者switch over to React(这显然是 Facebook 希望 Parse 发展的方向)

我太缺乏经验了,无法推荐这三个中的一个,尽管 #1 似乎最简单,而 #3 似乎是最容易维护的。仍在尝试做出自己的决定,但这超出了我最初问题的范围。谢谢大家的帮助。

【讨论】:

【解决方案2】:

我突然想到了两件事:

  1. 我看不到您在哪里初始化 Parse... 通常是 产生不同的错误,但仍然可能是一个问题
  2. 您正在为 Parse 引用您自己的本地库...也许可以尝试针对正式部署的版本。

script src="http://www.parsecdn.com/js/parse-1.2.13.min.js"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2022-06-28
    • 1970-01-01
    相关资源
    最近更新 更多