javascript - appView 在运行时在 Backbone 中未定义

标签 javascript backbone.js underscore.js

我正在尝试实例化 Backbone Collection View 的最基本版本,但 Backbone 告诉我我的 appView (DictionaryView();) 不是一个函数。我仔细研究了它的语法错误,但我不知道是什么导致了这个错误。

  `Uncaught TypeError: undefined is not a function
 backbone.js:1566 s
 index.html:102 (anonymous function)
 jquery.js:3073 
 jjquery.js:3185 
 k.fireWithjquery.js:3391 
 n.extend.readyjquery.js:3407 `

<script>

    (function($){

    //---------SINGLE ENTRY MODEL----------
            var Entry = Backbone.Model.extend({
                defaults: function(){
                    return{
                        word: '',
                        definition: ''
                    }
                }
            });

        //------------ENTRY MODEL COLLECTION------------
            var EntryList = Backbone.Collection.extend({
                model: Entry
            });

        //-----INSTANCIATE COLLECTION----
        var dictionary = new EntryList();

        //-----SINGLE ENTRY VIEW------
        var EntryView = new Backbone.View.extend({
            model: new Entry(),
            tagName:'div',

            initialize: function(){
                this.template = _.template($("#dictionary_template").html());

            },

            render: function(){
                this.$el.html(this.template(this.model.toJSON()));
                return this;
            }
        });

        //--------------DICTIONARY VIEW----------------
        var DictionaryView = new Backbone.View.extend({
            model: dictionary,
            el: $('#entries'),

            initialize: function(){
                this.model.on('add', this.render, this);
                this.model.on('delete', this.render, this);

            },

            render: function(){
                var self = this;
                self.$el.html('');
                _.each(this.model.toArray(), function(entry, i){
                    self.$el.append((new EntryView({model: entry})).render().$el);
                });

                return this;
            }
        });


        //-------BINDING DATA ENTRY TO NEW MODEL/VIEW-------
        $(document).ready(function(){
            $('#new-entry').submit(function(ev){
                var entry = new Entry({word: $('#word'), definition: $('#definition').val()});

                dictionary.add(entry);

                console.log(dictionary.toJSON());

                $('#new-entry').children('input').val();

                return false;
            });
            //PROBLEM LINE
            var appView = new DictionaryView();
        });
     })(jQuery);    

    </script>
     <!-- TEMPLATE -->
    <script type="text/template" id="dictionary_template">
        <span class="word"><%= word %></span>
        <span class="definition"><%= definition %></span>
        <a href="#" class="edit"><[edit]</a>
        <a href="#" class="delete"><[delete]</a>
      </script>

最佳答案

更改:

var DictionaryView = new Backbone.View.extend({

致:

var DictionaryView = Backbone.View.extend({

这应该可以解决它。您正在创建一个新的类声明,而不是实例化一个新对象。 编辑:与您的EntryView有同样的错误。

关于javascript - appView 在运行时在 Backbone 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27534797/

相关文章:

javascript - 声明具有相对于其他字段的默认值的主干模型

javascript - 在 node.js 或 JavaScript 中映射数组的简洁方法

javascript - Angularjs ng-bind-html-unsafe 替换

函数内的 JavaScript 通过变量名调用函数

javascript - 我可以通过单击链接删除浏览器历史记录中的站点条目吗?

javascript - 脚本导致 IE6 无错误地失败

非 SPA 的 JavaScript 架构

javascript - 如何将事件绑定(bind)到动态创建的主干中的 'el'?

javascript - 如果 View 具有某个类(backbone.js),则单击时触发函数

javascript - 如何根据 AngularJS 中的子结果集对结果进行排序